2012-08-02 68 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