2012-05-30 4 views
18

Die Frage ist ziemlich albern, aber ich bin völlig fest. Ich möchte untergeordnete Knoten eines Knotens basierend auf einer Bedingung extrahieren. Die XML ist wie folgt:Xpath: Wählen Sie Knoten in einer Bedingung (mit local-name())

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

Der Ausdruck ist offensichtlich: //a[aCode='aaa']

Aber ich kann nicht, wie ich es sollte sich ändern, wenn es mit Namespaces und ich habe ist local-name() zu verwenden. Ich habe folgendes auf http://www.xmlme.com/XpathTool.aspx getestet und es gibt einen Parsing-Fehler:

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

Hat jemand eine Ahnung, was ich tun soll?

+0

local-name() ist sehr ärgerlich! XPath verliert all seine Eleganz, wenn Sie beginnen, Namespaces zu verwenden ... aber das war eine hilfreiche Frage – ropata

Antwort

9

Versuchen Sie, diese

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

oder

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

Sie // an falscher Stelle verwendet haben.

+0

Danke! Ich wollte nur beide Kinder bekommen. – gisly

34

Sie bedeutete wahrscheinlich

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

Ja, es funktioniert, vielen Dank! – gisly

+0

Hier bedeutet '*' - '[* [local-name() = 'aCode'] = 'aaa']'? Hilf mir bitte zu verstehen! –

+1

'*' steht für "jedes Element". – choroba

0

Dieses Werk:

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

und auch diese:

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