我正在尝试用 Haskell 解析一些 XML 文件。对于这项工作,我使用HXT来获取有关现实世界应用程序中箭头的一些知识。所以我对箭头主题很陌生。
在 XPath (和HaXml)中,可以按位置选择一个节点,比如说:/root/a[2]/b
即使一遍又一遍地阅读文档,我也不知道如何使用 HXT 做类似的事情。
这是我正在使用的一些示例代码:
module Main where
import Text.XML.HXT.Core
testXml :: String
testXml = unlines
[ "<?xml version=\"1.0\"?>"
, "<root>"
, " <a>"
, " <b>first element</b>"
, " <b>second element</b>"
, " </a>"
, " <a>"
, " <b>third element</b>"
, " </a>"
, " <a>"
, " <b>fourth element</b>"
, " <b>enough...</b>"
, " </a>"
, "</root>"
]
selector :: ArrowXml a => a XmlTree String
selector = getChildren /> isElem >>> hasName "a" -- how to select second <a>?
/> isElem >>> hasName "b"
/> getText
main :: IO ()
main = do
let doc = readString [] testXml
nodes <- runX $ doc >>> selector
mapM_ putStrLn nodes
所需的输出将是:
third element
提前致谢!