当价格簿的货币为"GBP"时,我必须按名称"product-id"获取所有属性。使用xpath时,此表达式运行良好。但是当我使用xpath3时,它只返回第一个匹配的值,而不是所有的值。我所需要的只是xpath3 中xpath的等价表达式
工作xpath表达式:
#[xpath:/pricebooks/pricebook[./header/ccurrency="GBP"]/pricetables/pricetable/@product-id]
我尝试过的xpath表达式:
#[xpath3('/pricebooks/pricebook[./header/ccurrency="GBP"]/pricetables/pricetable/@product-id',payload,'STRING')]
预期:[产品1、产品2、产品4]
实际: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>
您尝试使用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[contains(@product-id,'product')]/@product-id-