2011-02-17 22 views
116

belirleyin:XPath: Aşağıdaki XML Having metin düğümü

<node>Text1<subnode/>text2</node> 

nasıl seçerim ya birinci ya XPath aracılığıyla ikinci metin düğümü? Böyle

şey: o düğüm içindeki her metnin birleştirilmiş sonucu olduğu için elbette

/node/text()[2] 

çalışmaz. Xpath çalışmanız gerekir

+10

Sen yazdı: * '/ düğüm/metin() o düğüm içindeki her metnin birleştirilmiş sonucu çünkü [2]' [...] çalışmıyor Aşağıdaki XPath ifadesi eşdeğerdir * Bu yanlış: Bu, "düğüm" kök öğesinin * ikinci metin düğümü çocuğu anlamına gelir. ** string değeri ** (descendant metin düğümlerinin birleştirilmesi) 'string (/ node)' olur –

+0

Xpath sorgusunun çalışması gerektiği anlamına mı geliyor? Sanırım başka bir yerde başka bir sorunum var. ;) Teşekkürler! – kernel

+0

İyi soru, +1. Açıklamam için cevabımı ve üst öğenin tümünü veya belirli bir metin düğümü çocuğunu seçen birkaç XPath ifadesini görün. –

cevap

141

aşağıdaki XML yaşıyorsunuz?

Kullanım:

/node/text() 

Bu XML belgesinin ("düğüm" olarak adlandırılır) üst elemanın tüm metin düğümü çocukları seçer.

/node/text()[1] 

Bu XML belgesinin ("düğüm" olarak adlandırılır) üst elemanın ilk metin-düğümü çocuğu seçer.

/node/text()[2] 

Bu XML belgesinin ("düğüm" olarak adlandırılır) üst elemanın ikinci metin-düğümü çocuğu seçer.

/node/text()[someInteger] 

Bu XML belgesinin ("düğüm" olarak adlandırılır) üst elemanın someInteger-inci metin düğümü çocuğu seçer.

/node/text()[position() = someInteger] 
+1

'/ node [2]/text()' Chrome 39'da benim için iyi çalışıyor. –

+0

Yorum için teşekkürler. Birkaç saat süren kaba kuvvetler kurtardı! –

+0

@NaftuliTzviKay: Bu, Chrome'un bozuk olduğu anlamına gelir. Kaynak XML belgesi iyi oluşturulmuşsa '/ node [2]' herhangi bir düğüm seçmemelidir. İyi biçimlendirilmiş bir XML belgesindeki tanım gereği, sadece bir (tek) üst öğe vardır - ayrıca "belge öğesi" olarak da bilinir –

22

. xpath ve mayınını MarkLogic ve Zorba Xquery/Xpath uygulamalarında test ettim.

Her ikisi de çalışmalıdır.

<node>Text1<subnode/>text2</node> 

nasıl seçerim ya birinci ya XPath aracılığıyla ikinci metin düğümü:

/node/child::text()[1] - should return Text1 
/node/child::text()[2] - should return text2 


/node/text()[1] - should return Text1 
/node/text()[2] - should return text2