2010-07-29 8 views
7

पर विचार सरल XML दस्तावेज़:क्या XPath अभिव्यक्ति के सभी नोड्स को सामान्यीकृत-स्थान लागू करना संभव है?

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

XPath /html/body/table/tr/td/text() इस्तेमाल करते हुए हम मिल जाएगा

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

यह सफेद स्थान ट्रिम करने के लिए संभव है, normalize-space() समारोह का उपयोग कर उदाहरण के लिए इसे पाने के लिए?

["Item 1", "Item 2"] 

normalize-space(/html/body/table/tr/td/text()) पैदावार सिर्फ पहला टीडी टैग की सामग्री छंटनी ["Item 1"]

+0

अच्छा प्रश्न (+1)। स्पष्टीकरण और XPath 2.0 समाधान के लिए मेरा उत्तर देखें। –

+0

मुझे भी एक समाधान चाहिए। –

उत्तर

10

XPath का उपयोग करना "/ html/शरीर/तालिका/tr/td/पाठ()" हम मिल जाएगा [ "आइटम 1", "आइटम 2"]।

क्या उदाहरण के लिए सामान्य स्थान-स्थान() फ़ंक्शन ["आइटम 1", "आइटम 2"] प्राप्त करने के लिए सफेद स्थान को ट्रिम करना संभव है?

XPath 1.0 में नहीं।

Xpath 2.0 में इस सरल है:

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

XPath 2.0 में एक XPath अभिव्यक्ति का एक स्थान कदम एक समारोह संदर्भ हो सकता है। इसका उपयोग उपरोक्त अभिव्यक्ति में xs:string आइटमों के अनुक्रम का उत्पादन करने के लिए किया जाता है, जिनमें से प्रत्येक संदर्भ नोड पर normalize-space() लागू करने का परिणाम है (उप-संपीड़न द्वारा चयनित कोई भी नोड जो अंतिम स्थान चरण से पहले है)।

2

आप XPath 2.0 उपयोग कर रहे हैं तो आप सिर्फ /html/body/table/tr/td/normalize-space(.) उपयोग कर सकते हैं।

यदि आप XPath 1.0 के साथ फंस गए हैं, तो मुझे विश्वास नहीं है कि यह संभव है। आपको केवल परिणामी तारों पर लूप करना होगा और उन्हें सामान्य बनाना होगा।

संबंधित मुद्दे