我继承了一个带有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')]
答案 0 :(得分:1)
下一个XPath将匹配所有<details>
元素与元素<company>
,其元素值包含文本1009:
/bill/details[contains(company, '1009')]
如果您不想匹配文本的一部分,但是您知道<company>
元素中的确切值,则可以使用:
/bill/details[company = 'C1009']
另请注意,可以使用local-name()
,但如果没有名称空间,则可以按照我的描述使用XPath。否则,您可以使用local-name()
或声明命名空间并使用该前缀。