2013-10-04 64 views
0

我繼承了一個帶有XPath篩選器的遺留系統,這不是我的強項。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> 

我需要一個函數來找到每個法案的XML特定的公司數量。在這種情況下,它是公司1009.該功能只需要返回一個真/假(空或找到)。如何解決這個問題?

已經有一個在成功找到一個場系統中的另一個目的的過濾器,但我不能讓它與多行工作:

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

回答

1

接下來的XPath將匹配所有<details>元素與元素<company>其中有包含文本1009的值:

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

如果你不想匹配的文本的一部分,但你知道在<company>元素的精確值,可以使用:

/bill/details[company = 'C1009'] 

另請注意,local-name()可以使用,但如果沒有命名空間,則可以按照我所述使用XPath。否則,您可以使用local-name()或聲明命名空間並使用該前綴。