我试图解析这个xml:
...
<member>
<name>id</name>
<value>
<string>1</string>
</value>
</member>
<member>
<name>description</name>
<value>
<string>sdfsdfsdf</string>
</value>
</member>
...
如何仅解析&#34;&lt; member&gt;&#34;带有下属的标签&#34;名称&#34; -tag =&#34; id&#34;?
我试过了:
getroot = multi ( ( getChildren >>> hasName "name" >>> hasText "id") `guards` (isElem >>> hasName "member" ) )
main = do
print <- runX (parseXML "test2.xml" >>> getroot >>> putXmlTree "-")
答案 0 :(得分:1)
使用过滤器hasName "name"
时,您会获得<name>
标记。该节点本身不是文本节点,因此hasText "id"
失败。这里的修改似乎有效:(我还必须更改hasText
的参数类型,可能是HXT的不同版本)
import Text.XML.HXT.Core
getroot = multi ( ( getChildren >>> hasName "name" >>> getChildren >>> hasText (=="id"))
`guards` (isElem >>> hasName "member" ) )
main = do
runX (readDocument [] "test2.xml" >>> getroot >>> putXmlTree "-")
我不是HXT的专家,所以可能有更好的方法来做你想做的事。