XPath में "/ नोड ()" और "नोड (") के बीच अंतर क्या है?
XPath की मेरी समझ के अनुसार, किसी भी HTML या XML डॉक्यूमेंट के लिए:
$x("/node()")
इसका $x("/child::node()")
मतलब है कि नोड को वापस करें जो कि संदर्भ नोड का एक बच्चा है। यहां, रूट नोड (/)
संदर्भ नोड है। इसलिए, यह html
तत्व देता है ।
$x("node()")
जिसका अर्थ $x("child::node()")
है कि वही html
तत्व भी लौटाता है । लेकिन इस मामले में, हमने उपरोक्त मामले के विपरीत संदर्भ नोड प्रदान नहीं किया है। तो, यह इस मामले में संदर्भ नोड की पहचान कैसे करता है?
इसके अलावा, दोनों एक्सपीथ अभिव्यक्ति के ऊपर और कार्यात्मक रूप से समान हैं।
जवाब
अंतर यह है कि /node()
दस्तावेज़ नोड ( /
) के रूप में संदर्भ नोड को निर्दिष्ट node()
करता है , लेकिन एक निहित, सापेक्ष संदर्भ नोड पर निर्भर करता है।
एक निहित, सापेक्ष संदर्भ नोड कैसे निर्धारित किया जाता है? खैर, संदर्भ के आधार पर। ;-) उदाहरण के लिए, होस्टिंग भाषा आम तौर पर प्रारंभिक संदर्भ नोड को मिलान या पुनरावृत्त होने के लिए निर्धारित करेगी। फिर, स्वयं XPath के मूल्यांकन के भीतर, प्रत्येक स्थान चरण (स्लैश के माध्यम से अलग /
) , बाद के चरणों के लिए संदर्भ नोड स्थापित करता है।
$x(path, [startNode])Chrome कंसोल में उपयोग किया जाने वाला नोटेशन वैकल्पिक रूप से एक दूसरा तर्क लेता है जिसका उपयोग संदर्भ नोड को स्पष्ट रूप से निर्दिष्ट करने के लिए किया जा सकता है। डिफ़ॉल्ट रूप से, यह दस्तावेज़ रूट नोड, के बराबर है मनाया व्यवहार करने के लिए जो सुराग जहां $x("node()")
और $x("/node()")
लौटे दिए गए दस्तावेज़ के लिए एक ही परिणाम।
इसके अलावा, दोनों एक्सपीथ अभिव्यक्ति के ऊपर और कार्यात्मक रूप से समान हैं।
जाहिर है node()
और child::node()
कर रहे हैं वाक्य रचना अलग है, लेकिन, हाँ, वे कर रहे हैं शब्दार्थ (या कार्यात्मक , जैसा कि आप कहते हैं) एक ही है क्योंकि child::
अक्ष डिफ़ॉल्ट धुरी है।
यह सभी देखें
- XSLT / XPath में वर्तमान नोड बनाम संदर्भ नोड?
- XML में रूट नोड, रूट एलिमेंट और डॉक्यूमेंट एलिमेंट में क्या अंतर है?
- XPath में .// और // * के बीच अंतर क्या है?