2017-01-23 101 views
0

我想收到的輸出:解析XPath查詢

10.62.197.125, 10.62.197.126, 10.62.197.127. 

如何做到這一點? (請注意,由於客戶限制,代碼已被以某種方式操縱)。

<output arrayType="ns2:aaa[20]" type="ns2:aaa_array"> 
    <item type="ns2:bbb"> 
    <ip_addr type="xsd:string">0a2ef556</ip_addr> 
    <hostaddr type="xsd:string">10.62.197.125</hostaddr> 
    <subnet_name type="xsd:string">Test</subnet_name> 
    <pool_id type="xsd:string">0</pool_id> 
    </item> 
    <item type="ns2:aaa"> 
    <ip_addr type="xsd:string">0a3c3c33</ip_addr> 
    <hostaddr type="xsd:string">10.62.197.126</hostaddr> 
    <subnet_name type="xsd:string">Test</subnet_name> 
    <pool_id type="xsd:string">0</pool_id> 
    </item> 
    <item type="ns2:aaa"> 
    <ip_addr type="xsd:string">0a3a72c4</ip_addr> 
    <hostaddr type="xsd:string">10.62.197.127</hostaddr> 
    <subnet_name type="xsd:string">Test</subnet_name> 
    <pool_id type="xsd:string">0</pool_id> 
    </item> 
</output> 
+2

XPath不會「產生輸出」,它會選擇節點。您需要另一種編程語言的幫助才能將這些節點轉換爲字符串。你有嘗試過什麼嗎?如果是,什麼?如果不是,爲什麼不呢? – Tomalak

+0

什麼版本的XPath?如果你可以使用2.0,你可以使用[string-join()](https://www.w3.org/TR/2010/REC-xpath-functions-20101214/#func-string-join)。 –

+0

那麼,我正在使用公司提供的工具來生成輸出,或者可能會根據您的狀態選擇合適的節點。我還沒有嘗試過任何東西,因爲我不知道如何編寫腳本。我第一次嘗試做的是剝離文本,幷包括「,然後再刪除幷包含」「,但這樣做只能爲我提供第一個值作爲輸出,通過該工具剝離更多值(多個單值)。現在,我想使用xpathExpression從上面的xml代碼中獲取輸出。 – arregold

回答

1

要獲取的元素:
/*/item/hostaddr/text()

結果

10.62.197.125 
10.62.197.126 
10.62.197.127 

得到一個字符串(與XPath支持2.0+):
string-join(/*/item/hostaddr/text(), ', ')

結果

10.62.197.125, 10.62.197.126, 10.62.197.127

這意味着:
選擇所有item元素的元素地址hostaddr文本。

測試:
你可以去一個XPath的測試,像this測試,粘貼選項1你的XML,粘貼XPath表達式字段中的表達式,並按下測試按鈕的XPath。

+0

用XPath得到的最接近的是節點texts_ - 除非OP可以使用XPath 2.0('string-join(// hostaddr,',')')。 –

+0

已更新的答案來反映此@DanielHaley –