2012-06-21 15 views
6

Próbuję sprawdzić, czy atrybut na przodku elementu nie jest równy ciągowi.Test Xpath dla atrybutu przodka nie jest równy ciąg

Tu jest mój XML ...

<aaa att="xyz"> 
<bbb> 
<ccc/> 
</bbb> 
</aaa> 
<aaa att="mno"> 
<bbb> 
<ccc/> 
</bbb> 
</aaa> 

Jeśli mam działając na elemencie ccc, próbuję przetestować, że jego dziadkowie aaa @att nie równe „xyz”.

Obecnie mam to ...

ancestor::aaa[not(contains(@att, 'xyz'))] 

Dzięki!

+0

Przodek * jakiego elementu *? Masz na myśli element, który ma co najmniej jeden element potomny? –

+0

Przepraszam, miałem nawiasy wokół tego elementu. Zobacz moją nową linię po przykładowym XML. – Jeff

Odpowiedz

15

Zakładając, że mówiąc przodkiem elementu masz na myśli element z elementów podrzędnych, to wyrażenie XPath należy zrobić:

//*[*/ccc][@att != 'xyz'] 

Wybiera

  1. wszystkie węzły
  2. które mają co najmniej jeden węzeł wnuczka <ccc>
  3. i które mają att atrybut, którego wartość nie jest równa xyz.

Aktualizacja: Ograniczony test dziadków <ccc>.

Aktualizacja 2: dostosowanych do zmienionych pytanie:

//ccc[../parent::aaa/@att != 'xyz'] 

Wybiera

  1. wszystkie <ccc> elementy
  2. które mają dziadków <aaa> z atrybutem att zestaw do wartości, która jest nie xyz
+0

Dzięki za odpowiedź. Jednak chcę przetestować tylko na aaa, który jest dziadkiem ccc. Z wyjaśnień wynika, że ​​test ten sprawdza się we wszystkich węzłach w dokumencie. – Jeff

+0

@Jeff: To nie było całkiem jasne z twojego pytania; Zaktualizowałem teraz swoją odpowiedź. –

+0

Przepraszamy, zaktualizowałem moje oryginalne pytanie. – Jeff

Powiązane problemy