2012-06-21 21 views
6

Bir öğenin atağındaki bir öznenin bir dizgiye eşit olup olmadığını sınamaya çalışıyorum. Ben eleman ccc üzerinde hareket ediyorum EğerAcestor özniteliği eşit olmayan dize için Xpath testi

İşte

benim XML olduğunu ...

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

, ben onun büyükbaba aaa @att eşit değildir "xyz" yaptığı test etmek çalışıyorum.

Şu anda bu var ...

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

teşekkürler! Varsayarsak

+0

* Hangi elementin * atası? En az bir tane çocuk elemanı olan bir eleman mı demek istiyorsun? –

+0

Üzgünüz, söz konusu öğe etrafında parantezler vardı. Örnek XML'den sonra yeni hattımı görün. – Jeff

cevap

15

Eğer alt öğeleri sahip bir öğenin bahsediyorsan bir elementin bir atası diyerek, bu XPath ifadesi yapması gerektiğini:

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

O

  1. tüm düğümleri
  2. seçer En az bir tane <ccc> torun düğümüne sahip olan
  3. veDeğeri xyz olanözniteliği.

Güncelleme: <ccc> dedesi için Kısıtlı testi.

Güncelleme 2: düzeltilen soruya Uyarlanmış:

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

seçer

  1. tüm <ccc> elemanları olan bir değere onun özniteliği ile att set bir büyükbaba <aaa> var
  2. xyz
+0

Cevabınız için teşekkür ederiz. Bununla birlikte, sadece ccc'nin büyükannesi olan aaa üzerinde test yapmak istiyorum. Sizden açıklamada, bu, belgedeki tüm aaa düğümlerinde sınamaktadır. – Jeff

+0

@Jeff: Bu, sorunuzdan tamamen anlaşamadı; Cevabımı şimdi güncelledim. –

+0

Üzgünüz, orijinal sorumu güncelledim. – Jeff

İlgili konular