2015-08-28 14 views
6

XPath 1.0'da, B tipi araya giren bir düğümde yer almayan geçerli (bağlam) düğüm A'nın tüm descendant düğümlerini C nasıl seçebilirim? Örneğin, <p> içinde bulunmayan geçerli öğede bulunan tüm <a> bağlantılarını bulun. Fakat eğer mevcut elemanın kendisi <p>'un içinde ise, bu konuyla alakasız. örnekte ... Başka türde bir elemanda bulunmayan alt öğeleri seçin

<p>     <—— this is irrelevant, because it's outside the current element 
    ... 
    <div>    <—— current element (context node) 
     ... 
     <a></a>  <—— the xpath should select this node 
     ... 
     <p> 
      ... 
      <a></a> <—— but not this, because it's inside a p, which is inside context 
      ... 
     <p> 
     ... 
    </div> 
    ... 
</p> 

araya giren düğüm çeşitli derinliklerde olabilir.

XSLT 1.0 yazıyorum, bu nedenle ek işlevler generate-id(), current() ve benzeri kullanılabilir. mevcut soyundan a elemanı atası, mevcut bağlam düğüm atası p yoksa

.//a[not(ancestor::p/ancestor::* = current())] 

Bu XPath kontrol:

+0

'/ p/div/a' gibi bir şey mi? Ve bu da http://stackoverflow.com/questions/15818191/xpath-select-one-type-of-nodes-only-in-direct-child-nodes – fukanchik

+1

@ fukanchik no'nun kopyasıdır. div' (şu andaki bağlamsal düğüm) ve “a” içinde olmayan tüm “a” yı seçmem gerekiyor, muhtemelen aradaki birkaç orta düğümle, örneğin aralarında bir kaç satır var. – Tobia

cevap

5

Bu bir olası XPath'dir. Başka bir deyişle, a öğesinin a ile geçerli bağlam düğümü arasında araya giren p atalarının bulunup bulunmadığını denetler.

+1

Bu mantıklı, ama '=' orada doğru şeyi yapıyor? ".// a [değil (ancestor :: p/ancestor :: * [generate-id (.) = Generate-id (current())])]' gibi bir şeye ihtiyacım yok mu? – Tobia

+0

@Tobia Üzgünüm, ifadenin öğenin değerini karşılaştırması veya öğeleri referansla karşılaştırması durumunda kendimden emin değilim (ki bunu yapmayı umuyorum) – har07

+2

Doğru olduğunu düşünmüyorum, çünkü "Her iki nesne de karşılaştırılırsa düğüm setleri, daha sonra karşılaştırma yapılır ve eğer ilk düğüm kümesinde bir düğüm varsa ve ikinci düğüm kümesindeki bir düğüm varsa, ** dizgi değerlerinde karşılaştırmanın gerçekleştirilmesi sonucu doğru olur İki düğümün ** doğrudur. " [kaynak] (http://www.w3.org/TR/xpath/#booleans) – Tobia

İlgili konular