2012-05-30 7 views
18

Pytanie jest dość głupie, ale całkowicie utknąłem. Chcę wyodrębnić węzły podrzędne węzła na podstawie warunku. XML jest następujący:Xpath: wybierz węzeł w warunku (z nazwą lokalną())

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

Wyrażenie jest oczywista: //a[aCode='aaa']

Ale nie mogę dostać w jaki sposób należy go zmienić, jeśli jest z przestrzeniami nazw i muszę używać local-name(). Przetestowałem następuje w http://www.xmlme.com/XpathTool.aspx i daje błąd parsowania:

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

ma ktoś jakiś pomysł co mam zrobić?

+0

local-name() jest bardzo irytujące! XPath traci całą swą elegancję, gdy zaczynasz używać przestrzeni nazw ... ale to było pomocne pytanie – ropata

Odpowiedz

9

Spróbuj

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

lub

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

Użyłeś // w niewłaściwym miejscu.

+0

Dzięki! Po prostu chciałem mieć obie dzieci. – gisly

34

Prawdopodobnie oznaczało

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

Tak, działa, dziękuję bardzo! – gisly

+0

Co to znaczy "*" - "[* [nazwa lokalna() =" kod "] =" aaa "]'? Pomóż mi to zrozumieć! –

+1

'*' oznacza "dowolny element". – choroba

0

Ta praca:

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

a także tego:

//*[local-name()='a'][aCode[text()='a2']] 
Powiązane problemy