1

我想知道,我怎样才能用 HXT 拆分单词?例如 :

我有那个->

{-# LANGUAGE Arrows, NoMonomorphismRestriction #-}
import Text.XML.HXT.Core
import System.Environment  --para uso do getArgs

data Class = Class { name ::String }
    deriving (Show,Eq)

main = do
   [src]<- getArgs
   teams <- runX(readDocument [ withValidate no] src  >>> getClass)
   print teams

atTag tag = deep (isElem >>> hasName tag)
getClass = atTag "owl:Class" >>>
    proc l -> do
    className <- getAttrValue "rdf:about" -< l
    returnA -< Class { name = className }

我想拆分单词 ClassName !因为那个节目(团队)的结果,给了我一组超链接网址(http://......)!(由于 XML 文件)谁能给我一些提示来解决它,好吗?谢谢 !

4

1 回答 1

1

您可以使用包split的函数splitOn

{-# LANGUAGE Arrows, NoMonomorphismRestriction #-}
import Text.XML.HXT.Core
import Data.List.Split (splitOn)

...

getClass = atTag "owl:Class" >>>
    proc l -> do
    className <- getAttrValue "rdf:about" -< l
    returnA -< Class { name = splitOn "#" className !! 1 }

ghci 中的示例:

> import Data.List.Split
> let className = "http://www.xfront.com/owl/ontologies/camera/#Window"
> splitOn "#" className !! 1
Loading package split-0.2.2 ... linking ... done.
"Window"

如果您的所有 URL 中只有一个“#”,上面的代码就可以正常工作。如果它们更复杂,你应该看看Parsec包。

于 2014-04-06T00:30:55.850 回答