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

filter を使用すると、タグ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 の専門家ではないので、もっと良い方法があるかもしれません。

于 2012-08-02T14:37:32.457 に答える