XPath: टेक्स्ट नोड का चयन करें


150

निम्नलिखित XML होने:

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

मैं XPath के माध्यम से या तो पहले या दूसरे पाठ नोड का चयन कैसे करूं?

कुछ इस तरह:

/node/text()[2]

बेशक यह काम नहीं करता क्योंकि यह नोड के अंदर हर पाठ का विलय परिणाम है।


11
आपने लिखा: /node/text()[2][...] काम नहीं करता क्योंकि यह नोड के अंदर हर पाठ का विलय परिणाम है जो गलत है: इसका मतलब है nodeमूल तत्व का दूसरा पाठ नोड बच्चास्ट्रिंग मान (वंशज पाठ नोड्स के संयोजन) होगाstring(/node)

आपका मतलब है कि Xpath क्वेरी को काम करना चाहिए? खैर, मुझे लगता है कि मुझे एक और समस्या कहीं और है। ;) धन्यवाद!
कर्नेल

अच्छा सवाल, +1। स्पष्टीकरण और कई XPath अभिव्यक्तियों के लिए मेरा जवाब देखें जो सभी या शीर्ष तत्व के एक विशिष्ट पाठ-नोड बच्चे का चयन करते हैं।
दिमित्रे नोवाचेव

जवाबों:


183

निम्नलिखित XML होने:

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

मैं XPath के माध्यम से या तो पहले या दूसरे पाठ नोड का चयन कैसे करूं?

उपयोग करें :

/node/text()

यह XML दस्तावेज़ के शीर्ष तत्व (नाम "नोड") के सभी पाठ-नोड बच्चों का चयन करता है।

/node/text()[1]

यह XML दस्तावेज़ के शीर्ष तत्व (नाम "नोड") के पहले पाठ-नोड बच्चे का चयन करता है।

/node/text()[2]

यह XML दस्तावेज़ के शीर्ष तत्व (नाम "नोड") के दूसरे पाठ-नोड बच्चे का चयन करता है।

/node/text()[someInteger]

यह XML दस्तावेज़ के शीर्ष तत्व (नाम "नोड") के कुछInteger-th पाठ-नोड बच्चे का चयन करता है। यह निम्नलिखित XPath अभिव्यक्ति के बराबर है:

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

@NaftuliTzviKay: इसका मतलब है कि क्रोम टूट गया है। /node[2]यदि स्रोत XML दस्तावेज़ अच्छी तरह से बना है, तो किसी भी नोड का चयन नहीं करना चाहिए। भी रूप में जाना जाता है - एक अच्छी तरह से गठित XML दस्तावेज में परिभाषा के अनुसार केवल एक (एकल) शीर्ष तत्व हैdocument-element
Dimitre Novatchev

1
क्या यह PHP में काम करता है? मैं केवल पाठ नोड्स के माध्यम से लूप करने की कोशिश कर रहा हूं, यहां तक ​​कि उन टैग के सेट के बीच में भी। समस्या यह है कि टैग की परवाह किए बिना एक साथ कई टेक्स्ट नोड्स की सामग्री को नष्ट कर रहा है। //*[text()]वैसे भी उपयोग करना । /html/text()काम नहीं करता।
आरोन गिल

2
@AaronGillion, हाँ, AFAIK PHP में सही ढंग से काम करने वाला XPath 1.0 मूल्यांकन है। ध्यान दें कि /html/text()दस्तावेज़ में सभी पाठ नोड्स का चयन नहीं करता है - केवल पाठ नोड्स जो शीर्ष ( htmlतत्व ) के बच्चे (वंशज नहीं) हैं । आप शायद चाहते हैं /html//text() । XPath अभिव्यक्तियों के निर्माण के लिए XPath के कुछ ज्ञान और समझ की आवश्यकता होती है।
दिमित्रे नोवत्चेव

धन्यवाद। मैंने थोड़ी देर पहले डबल-स्लैश चाल का पता लगाया!
आरोन गिल

@AaronGillion, आपका स्वागत है। आप इस ऑनलाइन प्रशिक्षण पाठ्यक्रम के मॉड्यूल 2 में XPath 1.0 और 2.0 की मूल बातें जान सकते हैं: pluralsight.com/courses/xslt-foundations-part1
Dimitre Novatchev

29

आपका xpath काम करना चाहिए। मैंने MarkLogic और Zorba Xquery / Xpath कार्यान्वयन में आपकी xpath और खान का परीक्षण किया है।

दोनों को काम करना चाहिए।

/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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.