0

我继承了一个带有 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')]
4

1 回答 1

1

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

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

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

/bill/details[company = 'C1009']

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

于 2013-10-04T07:19:40.357 回答