Xml Haskell-HXT解析条件

Xml Haskell-HXT解析条件,xml,haskell,hxt,Xml,Haskell,Hxt,我正在尝试解析此xml: ... <member> <name>id</name> <value> <string>1</string> </value> </member> <member> <name>description</name> <value> <string>sdfsdfsdf</st

我正在尝试解析此xml:

...
<member>
  <name>id</name>
  <value>
    <string>1</string>
  </value>
</member>
<member>
  <name>description</name>
  <value>
    <string>sdfsdfsdf</string>
  </value>
</member>
...
。。。
身份证件
1.
描述
sdfsdfsdf
...
如何仅解析具有从属“name”-tag=“id”的“”标记

我试过:

getroot = multi ( ( getChildren >>> hasName "name" >>> hasText "id") `guards` (isElem >>> hasName "member"  ) ) 

main = do
print <- runX (parseXML "test2.xml" >>> getroot >>> putXmlTree "-")
getroot=multi((getChildren>>>hasName“name”>>>hastxt“id”)`guards`(isElem>>>hasName“member”))
main=do
打印>>获取根>>>putXmlTree“-”)

当您使用过滤器
hasName“name”
时,您会得到
标签。该节点本身不是文本节点,因此
hasText“id”
失败。这里有一个似乎有效的修改:(我还必须更改
hasText
的参数类型,可能是HXT的另一个版本)


我不是HXT的专家,因此可能有更好的方法来做您想做的事情。

错误消息或问题是什么?没有错误消息。但是,不应解析任何描述标记(“description…”)。您可以将
getroot
写得更清楚一点,如
multi$isElem>>hasName“member”hastxt(=“id”)
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 "-")