Получить несколько атрибутов в 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, Эквивалентно переносу выражения в вызове XPath boolean() функция.

  • STRING Возвращает результат выражения, преобразованного в строку, в виде java.lang.String, Эквивалентно переносу выражения в вызове XPath string() функция.

  • NUMBER Возвращает результат выражения, преобразованного в удвоенное значение как java.lang.Double, Эквивалентно переносу выражения в вызове XPath number() функция.

  • NODE Возвращает результат в виде объекта узла.

  • NODESET: Возвращает DOM NodeList объект.

может это поможет,

/pricebooks/pricebook/price-tables/price-table[содержит(@product-id,'product')]/@product-id

Другие вопросы по тегам