2010-07-29 16 views
7

basit XML belgesi düşünün:Tüm düğümler XPath ifadesi buluntularına normalize alan uygulamak mümkün mü?

<html><body> 
<table> 
<tr><td> Item 1</td></tr> 
<tr><td> Item 2</td></tr> 
</table> 
</body></html> 

biz

[" Item 1", " Item 2"]. 

alacak o boşluk kırpmak mümkün mü /html/body/table/tr/td/text() XPath kullanımı, normalize-space() işlevini kullanarak örneğin bu alınır?

["Item 1", "Item 2"] 

normalize-space(/html/body/table/tr/td/text()) verimleri sadece ilk td etiketinin içeriğini kesilmiş ["Item 1"]

+0

İyi soru (+1). Bir açıklama ve XPath 2.0 çözümü için cevabımı görün. –

+0

Ayrıca bir çözüm istiyorum. –

cevap

10

[" Madde 1" , "Madde 2"].

için beyaz alanı, normalize boşluk() işlevini ["Öğe 1", "Öğe 2"] almak için kullanarak kırpmak mümkün mü?

XPath 1.0'da değil.

XPath 2.0 bu basit olup:

/html/body/table/tr/td/text()/normalize-space(.) 

XPath'ın 2.0 bir XPath bir ifade yer aşaması bir fonksiyonu referans olabilir. Bu, xs:string öğesinin bir dizisini üretmek için yukarıdaki ifadede kullanılır; her biri, bağlam düğümünde normalize-space() uygulanmasının sonucudur (son konum adımından önce gelen alt ifade tarafından seçilen herhangi bir düğüm).

2

["Item 1", "Item 2"] 

normalize-space(/html/body/table/tr/td/text()) verimleri sadece ilk td etiketinin içeriğini kesilmiş.

Eğer XPath 1.0 ile sıkışmış iseniz, bunun mümkün olduğuna inanmıyorum. Sonuçta ortaya çıkan dizelerin üzerine gelmeniz ve normalleştirmeniz gerekir. "/ Html/beden/tablo/tr/td/metin()" Biz alacak XPath kullanma

İlgili konular