Xpath过滤器以查找嵌套块中的特定值

时间:2013-10-04 06:27:56

标签: xml xpath filtering

我继承了一个带有XPath过滤器的遗留系统,这不是我强有力的一面。

示例XML(我无法更改):

<bill>
    <header>
       <no>1234</no>
    </header>
    <details>
       <company>C1009</company>
       <lineNo>1</lineNo>
       <amount>770.50</lineNo>
    </details>
    <details>
       <company>C1009</company>
       <lineNo>2</lineNo>
       <amount>1050.50</lineNo>
    </details>
</bill>

我需要一个函数来查找每个bill-xml的特定公司编号。在这种情况下,它是公司1009.该函数只需要返回一个真/假(空或找到)。怎么解决这个问题?

在系统中已经有一个用于其他目的的过滤器,它成功地找到了一个字段,但我不能让它与多行一起使用:

/*[local-name() = 'details']/*[local-name()='company' and contains(text(),'C1009')]

1 个答案:

答案 0 :(得分:1)

下一个XPath将匹配所有<details>元素与元素<company>,其元素值包含文本1009:

/bill/details[contains(company, '1009')]

如果您不想匹配文本的一部分,但是您知道<company>元素中的确切值,则可以使用:

/bill/details[company = 'C1009']

另请注意,可以使用local-name(),但如果没有名称空间,则可以按照我的描述使用XPath。否则,您可以使用local-name()或声明命名空间并使用该前缀。