2012-05-30 43 views
18

這個問題很愚蠢,但我完全陷入困境。我想根據條件提取節點的子節點。該XML如下:Xpath:根據條件選擇節點(使用local-name())

<a> 
<aCode>aaa</aCode> 
<aValue>bbb</aValue> 
</a> 

表達是顯而易見的://a[aCode='aaa']

但我無法得到我應該如何改變它,如果它與命名空間和我有使用local-name()。我測試了以下在http://www.xmlme.com/XpathTool.aspx並給出瞭解析錯誤:

/*[local-name()='a'][[local-name()='aCode']='aaa'] 

有沒有人的我應該做的任何想法?

+0

本地名稱()是很煩人!當你開始使用命名空間時,XPath失去了所有的優雅......但這是一個有幫助的問題 – ropata

回答

9

試試這個

/a/aCode[text()='aaa'] 

//*[local-name() = 'aCode' and text() = 'aaa'] 

你在錯誤的地方使用//

+0

謝謝! 我只想讓兩個孩子。 – gisly

34

你可能是指

//*[local-name()='a'][*[local-name()='aCode']='aaa'] 
+0

是的,它的工作原理非常感謝! – gisly

+0

這裏'*'是什麼意思 - '[* [local-name()='aCode'] ='aaa']'?請幫助我理解! –

+1

'*'代表「任何元素」。 – choroba

0

這一個工作:

//*[local-name()='a'][*[local-name()='acode' and text()='a2']] 

而且這一個:

//*[local-name()='a'][aCode[text()='a2']]