Haskell HXT解析条件

时间:2012-08-02 09:50:39

标签: xml haskell hxt

我试图解析这个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 "-")

1 个答案:

答案 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的专家,所以可能有更好的方法来做你想做的事。