xpath
विशिष्ट पाठ वाले तत्वों को खोजना
खोज…
कुछ पाठ के साथ सभी तत्वों का पता लगाएं
निम्नलिखित XML की कल्पना करें:
<root>
<element>hello</element>
<another>
hello
</another>
<example>Hello, <nested> I am an example </nested>.</example>
</root>
निम्नलिखित XPath अभिव्यक्ति:
//*[text() = 'hello']
<element>hello</element>
तत्व लौटाएगा, लेकिन <another>
तत्व नहीं। ऐसा इसलिए है क्योंकि <another>
तत्व में hello
पाठ के आसपास व्हाट्सएप है।
दोनों <element>
और <another>
को पुनः प्राप्त करने के लिए, कोई भी उपयोग कर सकता है:
//*[normalize-space(text()) = 'hello']
या
//*[normalize-space() = 'hello']
जो तुलना करने से पहले आसपास के व्हाट्सएप को ट्रिम कर देगा। यहां हम देख सकते हैं कि normalize-space
का उपयोग करते समय text()
नोड स्पेसिफिक वैकल्पिक normalize-space
।
विशिष्ट टेक्स्ट वाली एक तत्व को खोजने के लिए, आप उपयोग कर सकते हैं contains
कार्य करते हैं। निम्नलिखित अभिव्यक्ति <example>
तत्व को लौटाएगी:
//example[contains(text(), 'Hello')]
यदि आप ऐसे टेक्स्ट को ढूंढना चाहते हैं जो कई बच्चों / टेक्स्ट नोड्स को फैलाते हैं, तो आप उपयोग कर सकते हैं .
text()
बजाय text()
। .
तत्व की संपूर्ण पाठ सामग्री को संदर्भित करता है और यह बच्चे हैं।
//example[. = 'Hello, I am an example .']
कई टेक्स्ट नोड्स देखने के लिए, आप उपयोग कर सकते हैं:
//example//text()
जो वापस आएगा:
- "नमस्कार, "
- "मैं एक उदाहरण हूं"
- "।"
और अधिक स्पष्ट रूप से एक तत्व की संपूर्ण पाठ सामग्री को देखने के लिए, एक string
फ़ंक्शन का उपयोग कर सकता है:
string(//example[1])
या केवल
string(//example)
हैलो, मैं एक उदाहरण हूं।
उत्तरार्द्ध काम करता है, क्योंकि अगर नोड-सेट को string
जैसे कार्यों में पारित किया जाता है, तो XPath 1.0 बस उस नोड-सेट में पहले नोड (दस्तावेज़ क्रम में) को देखता है, और बाकी को अनदेखा करता है।
इसलिए:
string(/root/*)
लौटूंगा:
नमस्कार