我想用Haskell解析一些XML文件。對於這項工作,我正在使用HXT獲得有關現實世界中的箭頭的知識。所以我對箭頭主題很陌生。HXT:在Haskell中用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
提前感謝!
非常感謝。這是'(>>。)'和'(>。)'的很好的解釋。這是我錯過的提示。 '(!! nth)'只有一個問題。如果XML文件的元素太少,則會出現錯誤。使用助手函數'helper a = a >>。 (拿1滴(第 - 1))'會阻止這一點。 –
我不想搞砸你的答案,但我想分享我的代碼來選擇樹中的單個元素。以防萬一有人遇到同樣的問題或想要一些代碼來玩。您收到學分;-) –