XML दस्तावेज़:
<Home>
<Addr>
<Street>ABC</Street>
<Number>5</Number>
<Comment>BLAH BLAH BLAH <br/><br/>ABC</Comment>
</Addr>
</Home>
XPath अभिव्यक्ति:
//*[contains(text(), 'ABC')]
//*रूट नोड के किसी भी मूल तत्व से मेल खाता है । वह है, कोई भी तत्व लेकिन मूल नोड।
[...]एक विधेय है , यह नोड-सेट को फ़िल्टर करता है। इसके लिए नोड्स लौटाता ...है true:
एक नया नोड-सेट बनाने के लिए एक विधेय नोड-सेट [...] को फ़िल्टर करता है। फ़िल्टर किए जाने वाले नोड-सेट में प्रत्येक नोड के लिए, PredicateExpr का मूल्यांकन किया जाता है [...]; यदि PredicateExpr उस नोड के लिए सही का मूल्यांकन करता है, तो नोड को नए नोड-सेट में शामिल किया जाता है; अन्यथा, यह शामिल नहीं है।
contains('haystack', 'needle')रिटर्न trueअगर haystack शामिल हैं needle :
बूलियन होता है (स्ट्रिंग, स्ट्रिंग)
यदि फ़ंक्शन में सत्यता होती है यदि पहला तर्क स्ट्रिंग में दूसरा तर्क स्ट्रिंग है, और अन्यथा गलत रिटर्न देता है।
लेकिन contains()इसके पहले पैरामीटर के रूप में एक स्ट्रिंग लेता है। और यह नोड्स पारित किया है। इससे निपटने के लिए कि पहले पैरामीटर के रूप में प्रत्येक नोड या नोड-सेट को फ़ंक्शन द्वारा स्ट्रिंग में बदल दिया जाता है string():
एक तर्क को स्ट्रिंग में परिवर्तित किया जाता है जैसे कि स्ट्रिंग फ़ंक्शन को कॉल करके।
string()पहले नोडstring-value का फ़ंक्शन रिटर्न :
नोड-सेट एक नोड में स्ट्रिंग नोड में परिवर्तित करके नोड-सेट में लौटाया जाता है जो पहले दस्तावेज़ क्रम में होता है। यदि नोड-सेट खाली है, तो एक खाली स्ट्रिंग लौटा दी जाती है।
string-valueएक तत्व नोड का :
तत्व नोड का स्ट्रिंग-मान दस्तावेज़ क्रम में तत्व नोड के सभी पाठ नोड वंश के स्ट्रिंग-मानों का संघनन है।
string-valueएक पाठ नोड का :
किसी टेक्स्ट नोड का स्ट्रिंग-मान वर्ण डेटा है।
तो, मूल रूप string-valueसे सभी पाठ हैं जो एक नोड में समाहित हैं (सभी वंशज पाठ नोड्स का संघनन)।
text() एक नोड परीक्षण है जो किसी भी पाठ नोड से मेल खाता है:
नोड टेस्ट टेक्स्ट () किसी भी टेक्स्ट नोड के लिए सही है। उदाहरण के लिए, बच्चा :: टेक्स्ट () संदर्भ नोड के टेक्स्ट नोड बच्चों का चयन करेगा।
कहा जाने के बाद, //*[contains(text(), 'ABC')]किसी भी तत्व (लेकिन रूट नोड) से मेल खाता है, जिसमें पहला पाठ नोड होता है ABC। चूंकि text()एक नोड-सेट देता है जिसमें संदर्भ नोड के सभी बाल पाठ नोड्स होते हैं (एक अभिव्यक्ति का मूल्यांकन किया जाता है)। लेकिन contains()पहले वाला ही लेता है। तो पथ के ऊपर दस्तावेज़ के लिए Streetतत्व से मेल खाता है ।
निम्न अभिव्यक्ति //*[text()[contains(., 'ABC')]]किसी भी तत्व (लेकिन रूट नोड) से मेल खाती है, जिसमें कम से कम एक बाल पाठ नोड है, जिसमें शामिल है ABC। .संदर्भ नोड का प्रतिनिधित्व करता है। इस मामले में, यह किसी भी तत्व का मूल पाठ नोड लेकिन रूट नोड है। इसलिए पथ के ऊपर दस्तावेज़ के लिए मेल खाता है Street, औरComment तत्वों से ।
अब फिर, //*[contains(., 'ABC')]किसी भी तत्व (लेकिन रूट नोड) से मेल खाता है , जिसमें ABC(वंश पाठ नोड्स के संघात में) शामिल है। दस्तावेज़ के ऊपर से मेल खाता है के लिए Home, Addr, Street, और Commentतत्वों। जैसे, //*[contains(., 'BLAH ABC')]से मेल खाता है Home, Addrऔर Commentतत्वों।
//*[contains(text(),'ABC')]केवल<Street>तत्व देता है। यह<Street>या के किसी भी पूर्वजों को वापस नहीं करता है<Comment>।