0

当该价格手册的货币为“GBP”时,我必须按名称“product-id”获取所有属性。使用 xpath 时,此表达式工作正常。但是当我使用 xpath3 时,它只返回第一个匹配值而不是所有值。我需要的只是 xpath3 中 xpath 的等效表达式

工作 xpath 表达式

#[xpath:/pricebooks/pricebook[./header/currency ="GBP"]/price-tables/price-table/@product-id]

我试过的xpath表达式:

#[xpath3('/pricebooks/pricebook[./header/currency ="GBP"]/price-tables/price-table/@product-id',payload,'STRING')]

预期:[产品1,产品2,产品4]

实际:产品1

输入 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>
4

1 回答 1

2

看起来您尝试使用的第三个参数xpath3()是错误的。尝试使用NODESET而不是,STRING因为您的意思是返回多个节点。

从文档中引用:

  • BOOLEAN: 以 . 形式返回表达式的有效布尔值java.lang.String。等效于将表达式包装在 XPathboolean()函数的调用中。

  • STRING: 以 . 形式返回转换为字符串的表达式的结果java.lang.String。等效于将表达式包装在对 XPathstring()函数的调用中。

  • NUMBER: 以 . 形式返回转换为 double 的表达式的结果java.lang.Double。等效于将表达式包装在 XPathnumber()函数的调用中。

  • NODE:将结果作为节点对象返回。

  • NODESET: 返回一个 DOMNodeList对象。

于 2016-05-10T06:29:58.107 回答