2017-01-23 5 views
0

Я хотел бы получить выход:Синтаксический XPath Query

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

Ну, я использую инструмент от компании для создания вывода или, возможно, выберем подходящие узлы, когда вы укажете. Я еще ничего не пробовал, так как понятия не имею, как его скриптировать. То, что я в первый раз попытался сделать, это разделить текст на « и снова удалить его после и включить«, но это только дало мне первое значение как результат, t разделите больше значений с помощью инструмента (более одного значения). Теперь я хотел бы использовать 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

Это означает:
Выберите текст в элементе hostaddr во всех элементах элементов.

Тест:
Вы можете проверить это, идя в XPath тестер, как this, вставить XML в варианте 1, вставить выражение в поле выражения XPath и нажмите кнопку Тест XPath.

+0

. Ближе всего вы можете получить XPath - это текст узла - если OP не может использовать XPath 2.0 ('string-join (// hostaddr, ',')'). –

+0

Обновленный ответ, чтобы отразить это @DanielHaley –