我必须按名称获取所有属性' product-id'当该价格手册的货币为' GBP'。使用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' ,有效负载,' STRING')]
预期:[product1,product2,product4]
实际:product1
INPUT 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>
答案 0 :(得分:1)
您尝试使用xpath3()
时的第三个参数看起来是错误的。尝试使用 NODESET
而不是STRING
,因为您的意思是返回多个节点。
BOOLEAN
:以java.lang.String
的形式返回表达式的有效布尔值。相当于在XPath boolean()
函数的调用中包装表达式。
STRING
:返回转换为字符串的表达式的结果,为java.lang.String
。相当于在调用XPath string()
函数时包装表达式。
NUMBER
:将转换为double的表达式的结果作为java.lang.Double
返回。相当于在XPath number()
函数的调用中包装表达式。
NODE
:将结果作为节点对象返回。
NODESET
:返回DOM NodeList
对象。