2012-05-30 18 views
5

tüm öğelerini, metin düğümlerini ve yorum düğümlerini belgede görüntülendiği sırayla seçmek için XPath ifadesi nedir?Kaynak sırasındaki * tüm * öğeleri, metin düğümlerini ve yorum düğümlerini seçmek için XPath ifadesi

aşağıdaki etkili tüm unsurları, ancak seçer değil metin düğümleri ve yorum düğümleri:

var result = document.evaluate('//*', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null), 
    index = -1; 
while (++index < result.snapshotLength) { 
    console.log(result.snapshotItem(index)); 
} 

aşağıdaki gibi bir şey yapmak mümkün mü? (Not: Bu işlevsel olmayan sözde koddur.)

document.evaluate('//* and text() and comment()'); 

cevap

5
//node() 

şeyin bir çocuktur her düğüm seçer: yani tüm unsurları, metin düğümleri, yorumlar ve işlem yönergeleri (öznitelikler, ad alanı düğümleri veya belge düğümü değil)

+0

Woah! Kısa ve güzel. Bu harika çalışıyor; ayrıca kök öğesini seçer - ve HTML belgeleri için bile DOCTYPE (bilmediğim şey). –

+0

TIL bu document.evaluate ('// node()', belge, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null) .singleNodeValue === document.doctype'. –

+1

Bir DOCTYPE düğümü seçerse, birileri XPath özelliklerini sanal olarak yorumladıysa; XPath veri modelinde böyle bir düğüm yok. –

1

bir XML belgesindeki metin ve yorum düğümlerle test edilmiştir. Orada daha verimli bir yaklaşım olabilir, ama bu birliği kullanarak, benim için belge sırayla elemanları, metin ve yorum düğümleri döndürür edilebilir:

//*|//*/text()|//*/comment() 
+0

Sorun, HTML (XML olarak değil) ile ilgilidir. Bu nedenle, bu Yığın Taşması sayfasındaki konsolda deneyebilirsiniz. örnek. Yani, cevabın iyi çalışıyor gibi görünüyor. Bir XPath n00b olarak, '|' bilmedim - teşekkürler! –

+1

Ah, bu durumda, '' '' sendika' olarak hoş geldiniz ve XPATH 1.0’da yalnızca sorgunun kökü için geçerli olan uyarıyı, bir "yol" aracılığıyla orta yoldan kullanamazsınız. – MattH

+2

Oh, ve XPATH bilginizi önyüklemenin iyi bir yolu, etiketin en üst kullanıcılarının bazı cevaplarını gözden geçirmektir: http://stackoverflow.com/tags/xpath/topusers – MattH

İlgili konular