在xpath3中获取多个属性

时间:2016-05-10 06:06:19

标签: xml mule xpath-3.0

我必须按名称获取所有属性' 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>

1 个答案:

答案 0 :(得分:1)

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

引自the documentation

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

  • STRING :返回转换为字符串的表达式的结果,为java.lang.String。相当于在调用XPath string()函数时包装表达式。

  • NUMBER :将转换为double的表达式的结果作为java.lang.Double返回。相当于在XPath number()函数的调用中包装表达式。

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

  • NODESET :返回DOM NodeList对象。