2012-08-02 69 views
2

我试图解析这个XML:哈斯克尔HXT解析条件

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

如何解析只有“<成员>”与下属“名称”标签 - 标签=“身份证”?

我想:

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

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

错误信息或问题是什么? – huon 2012-08-02 10:38:19

+0

没有错误信息。 但是,没有描述标签(“ description ...”)应该被解析。 – abcdeef 2012-08-02 10:43:16

回答

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的专家,所以它可能是有是一种更好的方式去做你想做的事情。

+0

你可以更清楚地写'getroot'作为'multi $ isElem >>> hasName“成员” hasText(==“id”))''。 – 2012-08-02 18:25:57