2017-01-23 96 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 –