2

我正在尝试解析这个 xml:

...
<member>
  <name>id</name>
  <value>
    <string>1</string>
  </value>
</member>
<member>
  <name>description</name>
  <value>
    <string>sdfsdfsdf</string>
  </value>
</member>
...

如何仅解析具有从属“name”-tag =“id”的“<member>”标签?

我试过了:

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

main = do
print <- runX (parseXML "test2.xml" >>> getroot >>> putXmlTree "-")
4

1 回答 1

1

当你使用 filterhasName "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 的专家,所以可能有更好的方法来做你想做的事。

于 2012-08-02T14:37:32.457 回答