Получить несколько атрибутов в xpath3
Я должен получить все атрибуты по имени product-id, если валюта этого прайс-листа - GBP. Это выражение работает нормально, когда используется xpath. Но когда я использую xpath3, он возвращает только первое совпадающее значение вместо всех значений. Все, что мне нужно, это эквивалентное выражение xpath в xpath3
рабочее выражение xpath:
# [xpath: / pricebooks / pricebook [./ header / currency = "GBP"] / прейскуранты / прейскурант /@product-id]
Выражение xpath, которое я пробовал:
# [xpath3 ('/ pricebooks / pricebook [./ header / currency = "GBP"] / прейскуранты / прейскурант / @ product-id ", полезная нагрузка," STRING ")]
ожидается: [product1,product2,product4]
актуально: product1
ВХОД XML:
<pricebooks>
<pricebook>
<header pricebook-id="GB">
<currency>GBP</currency>
<display-name>name1</display-name>
</header>
<price-tables>
<price-table product-id="product1">
<amount quantity="1">24.0</amount>
</price-table>
</price-tables>
</pricebook>
<pricebook>
<header pricebook-id="NZ">
<currency>GBP</currency>
<display-name>name2</display-name>
</header>
<price-tables>
<price-table product-id="product2">
<amount quantity="1">38.00003</amount>
</price-table>
</price-tables>
</pricebook>
<pricebook>
<header pricebook-id="US">
<currency>USD</currency>
<display-name>name3</display-name>
</header>
<price-tables>
<price-table product-id="A215ZZ003">
<amount quantity="1">28.0</amount>
</price-table>
</price-tables>
</pricebook>
<pricebook>
<header pricebook-id="AU">
<currency>GBP</currency>
<display-name>name4</display-name>
</header>
<price-tables>
<price-table product-id="product4">
<amount quantity="1">30.0</amount>
</price-table>
</price-tables>
</pricebook>
</pricebooks>
2 ответа
Похоже, третий параметр в вашей попытке использования xpath3()
неправильно. Попробуйте использовать NODESET
вместо STRING
так как вы хотите вернуть несколько узлов.
Цитируется из документации:
BOOLEAN
Возвращает эффективное логическое значение выражения в видеjava.lang.String
, Эквивалентно переносу выражения в вызове XPathboolean()
функция.STRING
Возвращает результат выражения, преобразованного в строку, в видеjava.lang.String
, Эквивалентно переносу выражения в вызове XPathstring()
функция.NUMBER
Возвращает результат выражения, преобразованного в удвоенное значение какjava.lang.Double
, Эквивалентно переносу выражения в вызове XPathnumber()
функция.NODE
Возвращает результат в виде объекта узла.NODESET
: Возвращает DOMNodeList
объект.
может это поможет,
/pricebooks/pricebook/price-tables/price-table[содержит(@product-id,'product')]/@product-id