XPath सिंटैक्स। XPath क्वेरी भाषा

     (पूर्वज) में संदर्भ नोड के सभी पूर्वजों शामिल हैं, जिसमें माता-पिता, दादा, परदादा, आदि शामिल हैं। इस अक्ष में हमेशा रूट नोड होता है - जब तक कि संदर्भ नोड रूट नोड ही नहीं है।

सूची 7.3 देखें, जिसमें अक्ष का उपयोग किया गया है

  तत्वों के सभी पूर्वजों के नाम (तत्व में संग्रहीत) की खोज। लिस्टिंग 7.3। अक्ष पूर्वज का उपयोग करें
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e

यहाँ इस शैली शीट को लागू करने का परिणाम है

:

पूर्वज-या-स्व अक्ष का उपयोग करना

  संदर्भ नोड के सभी पूर्वजों में, साथ ही संदर्भ नोड भी शामिल है। इसका मतलब है, अन्य बातों के अलावा, कि ऐसी धुरी में हमेशा एक रूट नोड होता है।

सूचीकरण 7.4 विशेषता जोड़ता है

  पूरे दस्तावेज़ में मूल्य "स्टीव" के साथ। लिस्टिंग 7.4। AUTHOR विशेषताओं के साथ planets.xml
.0553
58.65
1516
.983
43.4
.815
116.75
3716
.943
66.8
1
2107
1
128.4

अब मान लीजिए कि मैं तत्वों के सभी पूर्वजों के नामों को सूचीबद्ध करना चाहता हूं

एक विशेषता होने के साथ-साथ वर्तमान तत्व भी यदि इसकी एक विशेषता है। यह अक्ष और फ़ंक्शन (लिस्टिंग 7.5) का उपयोग करके किया जा सकता है। लिस्टिंग 7.5। पूर्वज-या-स्व अक्ष का उपयोग करना
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e

यहाँ परिणाम है; तीनों तत्वों के चयनित पूर्वजों को दर्शाता है

, तत्व सहित, बशर्ते कि यह एक विशेषता है:

आवेदन वंशज अक्ष

  (वंशज) संदर्भ नोड के सभी वंशज हैं। ध्यान दें कि विशेषताएँ या नामस्थान नोड्स यहाँ शामिल नहीं हैं, क्योंकि उन्हें चाइल्ड नोड्स नहीं माना जाता है।

निम्न उदाहरण (लिस्टिंग 7.6) दर्शाता है कि इस अक्ष के साथ कैसे काम करना है। इस बार मैं आइटम में एक नोट जोड़ना चाहता हूं

  बुध:
  (क्षमा करें, लेकिन बुध विस्फोट हो गया और अब उपलब्ध नहीं है।) बुध को खोजने के लिए, मुझे केवल यह जांचने की आवश्यकता है कि क्या किसी तत्व के वंशज का स्ट्रिंग मूल्य "" है, जिसे मैं पसंद की विधेय के अंदर XPath अभिव्यक्ति की मदद से करूंगा। लिस्टिंग 7.6। आवेदन वंशज अक्ष
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e
माफ़ कीजिए। पारा उड़ गया है और अब उपलब्ध नहीं है।

यहां परिणामी दस्तावेज है, एक नए तत्व द्वारा पूरक है।

  केवल बुध के लिए:
.0553
58.65
1516
.983
43.4
क्षमा करें, बुध उड़ गया है और अब उपलब्ध नहीं है।
.815
116.75
3716
.943
66.8

वंशज-या-स्व धुरी का उपयोग करना

  इसमें संदर्भ नोड और संदर्भ नोड के सभी वंशज शामिल हैं। हालाँकि, नोटिस, कि इसमें नामस्थान विशेषताएँ और नोड्स नहीं हैं।

निम्नलिखित उदाहरण (लिस्टिंग 7.7) दर्शाता है कि अक्ष के साथ कैसे काम किया जाए। इस मामले में, मैंने एक सरलीकृत शैली पत्रक (सरलीकृत शैली पत्रक पर विवरण के लिए, अध्याय 2 देखें) बनाया, जो वंश के उपयोग से सभी तत्वों को संसाधित करता है, जो ग्रह डेटा के पहले से परिचित HTML तालिका का निर्माण करता है।

लिस्टिंग 7.7। वंशज-या-स्व धुरी का उपयोग करना

बस इतना ही। मैंने इस तरह के वंशज कुल्हाड़ियों की मदद से जोर देने के लिए यहां एक सरलीकृत शैली की शीट लगाई

  या, आप स्वचालित रूप से सभी चयनित नोड्स को संसाधित कर सकते हैं, उसी तरह से जैसे कि तत्व करते हैं या।

अनुप्रयोग अक्ष निम्नलिखित

निम्नलिखित अक्ष (अगले) में दस्तावेज़ में निर्दिष्ट आदेश के अनुसार संदर्भ नोड के बाद स्थित सभी नोड्स हैं (दूसरे शब्दों में, जिस क्रम में वे दस्तावेज़ में दिखाई देते हैं, इसकी शुरुआत से शुरू), संदर्भ नोड के सभी वंशों को छोड़कर, साथ ही नोड्स को छोड़कर। विशेषताएँ और नाम स्थान।

इस उदाहरण में (सूचीकरण 7.8), मैं प्रत्येक आइटम का चयन करता हूं। और बाद के सभी तत्वों को परिणामस्वरूप दस्तावेज़ में कॉपी करें।

लिस्टिंग 7.8। अनुप्रयोग अक्ष निम्नलिखित
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e
   बुध, यह बाद के सभी तत्वों की नकल करता है - यानी शुक्र, फिर शुक्र के सभी वंश, फिर पृथ्वी और फिर पृथ्वी के सभी वंशज। उसके बाद, वह शुक्र के तत्व का चयन करता है और निम्नलिखित सभी तत्वों की प्रतिलिपि बनाता है, अर्थात् पृथ्वी और पृथ्वी के सभी वंशज:
.815
116.75
3716
.943
66.8
.815
116.75
3716
.943
66.8
1
2107
1
128.4
1
2107
1
128.4
1
2107
1
128.4
1
2107
1
128.4

दूसरी ओर, जब अक्ष का उपयोग कर

  केवल अगले भाइयों को परिणामी दस्तावेज़ में कॉपी किया जाएगा, अर्थात, केवल तत्व, जैसा कि हम अगले भाग में देखेंगे।

अनुप्रयोग अक्ष निम्न-सिबलिंग

  संदर्भ नोड के सभी बाद के भाई शामिल हैं।

उदाहरण के लिए, मैं प्रत्येक आइटम का चयन कर सकता हूं।

  और अक्ष में सभी नोड्स को परिणामस्वरूप दस्तावेज़ में कॉपी करें जो निम्नानुसार है (लिस्टिंग 7.9)। लिस्टिंग 7.9। अनुप्रयोग अक्ष निम्न-सिबलिंग
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e

इस मामले में, पहले दो नोड कॉपी किए जाते हैं, बुध (शुक्र और पृथ्वी) के बाद, फिर शुक्र, पृथ्वी के अगले नोड-भाई की नकल की जाती है। पृथ्वी के स्वयं के कोई भाई नहीं हैं, इसलिए इसका परिणाम कुछ इस प्रकार है:

.815
116.75
3716
.943
66.8
1
2107
1
128.4
1
2107
1
128.4

नेमस्पेस अक्ष का उपयोग

  संदर्भ नोड के नामस्थान नोड्स शामिल हैं। ध्यान दें कि यदि संदर्भ नोड एक तत्व नहीं है तो यह अक्ष खाली है। तत्व के लिए एक नाम स्थान नोड है:

एक तत्व का प्रत्येक गुण जिसका नाम "xmlns:" से शुरू होता है;

पूर्वज तत्व की प्रत्येक विशेषता जिसका नाम "xmlns:" से शुरू होता है (बेशक, यदि तत्व स्वयं या निकटतम पूर्वज फिर से नाम स्थान की घोषणा नहीं करता है);

गुण

यदि तत्व या पूर्वज में एक विशेषता है।

निम्नलिखित उदाहरण में (सूचीकरण 7.10), मैं तत्व नाम स्थान प्रदर्शित करना चाहता हूं

  परिणामी दस्तावेज़ में, और स्रोत दस्तावेज़ में, मैंने नाम "http://www.starpowder.com" नामस्थान को सौंपा। लिस्टिंग 7.10। planets.xml नेमस्पेस घोषणा के साथ
.0553
58.65
1516
.983
43.4

यहां एक स्टाइल शीट (लिस्टिंग 7.11) है, जिसमें मैं तत्व में उपयोग किए गए नाम स्थान की जांच करता हूं

. लिस्टिंग 7.11। Planets.xml में नाम स्थान अक्ष का उपयोग करना
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e

लेकिन परिणामी दस्तावेज (ध्यान दें कि दस्तावेज़ का प्रकार XSLT प्रोसेसर के आधार पर भिन्न हो सकता है):

मूल अक्ष का उपयोग करें

मूल अक्ष में संदर्भ नोड के माता-पिता (और केवल माता-पिता) होते हैं, यदि कोई हो।

मान लीजिए मैं तत्व पृथ्वी की सामग्री को बदलना चाहता हूं

  "\u003e\u003e (पृथ्वी के द्रव्यमान को 1 के रूप में लिया जाता है)। निम्न टेम्पलेट (लिस्टिंग 7.12) इसके लिए जांचता है कि क्या मूल तत्व में स्ट्रिंग मान "अर्थ" वाला तत्व है। लिस्टिंग 7.12। मूल अक्ष का उपयोग करें
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e

पृथ्वी का द्रव्यमान 1 पर सेट है।

और यहाँ परिणाम है:

.0553
58.65
1516
.983
43.4
.815
116.75
3716
.943
66.8
पृथ्वी का द्रव्यमान 1 पर सेट है।
2107
1
128.4

अक्ष पूर्ववर्ती का प्रयोग करें

  दस्तावेज़ में निर्दिष्ट आदेश के अनुसार संदर्भ नोड के सामने स्थित सभी नोड्स, संदर्भ नोड के सभी पूर्वजों को छोड़कर, साथ ही विशेषता नोड्स और नेमस्पेस नोड्स को छोड़कर।

मान लीजिए, उदाहरण के लिए, मुझे किसी आइटम की सामग्री सेट करने की आवश्यकता है

  पाठ "" (यह ग्रह बुध की तुलना में सूर्य से बहुत दूर स्थित है।) यदि प्रश्न में ग्रह वास्तव में बुध की तुलना में सूर्य से दूर है। ऐसा करने का एक तरीका यह जांचना है कि क्या बुध ग्रह के सामने स्थित है, दस्तावेज में निर्दिष्ट क्रम के अनुसार, अक्ष का उपयोग करके (लिस्टिंग 7.13)। लिस्टिंग 7.13। अक्ष पूर्ववर्ती का प्रयोग करें
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e
यह ग्रह बुध की तुलना में सूर्य से बहुत दूर है।

यदि वर्तमान ग्रह बुध के बाद है, तो मैं इसके तत्व में एक संदेश सम्मिलित कर सकता हूं

। परिणाम इस प्रकार है:
.0553
58.65
1516
.983
43.4
.815
116.75
3716
.943
यह ग्रह बुध की तुलना में सूर्य से बहुत दूर है।
1
2107
1
यह ग्रह बुध की तुलना में सूर्य से बहुत दूर है।

पूर्ववर्ती-सिबलिंग अक्ष का उपयोग करें

  संदर्भ नोड के सभी पिछले भाई शामिल हैं। ध्यान दें कि यदि संदर्भ नोड एक विशेषता नोड या एक नाम स्थान नोड है, तो अक्ष रिक्त होगा।

क्या होगा, उदाहरण के लिए, आपको एक टेम्पलेट बनाने की आवश्यकता है जो केवल तत्वों का चयन करेगा

  बुध के तत्व में ऐसा करने के लिए, आप जाँच सकते हैं कि क्या भाई तत्व से पहले मौजूद हैं, जो कि स्ट्रिंग मान वाले तत्व हैं ""। यदि आप एक अक्ष (सूची 7.14) लागू करते हैं, तो खोज वर्तमान तत्व तक सीमित होगी, जिसका अर्थ है कि जब तक आप सही तत्व में नहीं हैं, बुध का चयन नहीं किया जाएगा। लिस्टिंग 7.14। पूर्ववर्ती-सिबलिंग अक्ष का उपयोग करें
  xmlns: xsl = "http://www.w3.org/1999/XSL/Transform"\u003e

और यहाँ परिणाम है:

.0553
58.65
1516
.983
यह बुध ग्रह है, जो सूर्य के सबसे निकट है।
.815
116.75
3716
.943
66.8
1
2107
1
128.4

स्वयं अक्ष का उपयोग करें

  केवल संदर्भ नोड शामिल हैं। XPath के एक संक्षिप्त विवरण के अनुसार, जैसा कि हम बाद में देखेंगे, "" आप उपयोग कर सकते हैं "" के बजाय।

यह अक्ष ध्यान में रखने के लिए उपयोगी है, क्योंकि, जैसा कि आप अध्याय 4 से याद करते हैं, यदि आप एक अक्ष निर्दिष्ट नहीं करते हैं, तो डिफ़ॉल्ट अक्ष होगा

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

निम्नलिखित उदाहरण में, मैं तत्वों के लिए पैटर्न का संयोजन कर रहा हूं

  और एक पैटर्न में। चूंकि इन तत्वों के अलग-अलग प्रारूप हैं, इसलिए मुझे उन्हें एक ही टेम्पलेट के भीतर अलग-अलग व्यवहार करना होगा (जो कि अक्ष के मूल्यों की जांच करके किया जा सकता है, जो कि एक गैर-खाली नोड सेट लौटाता है, यदि संदर्भ नोड एक तत्व है, और एक गैर-खाली नोड सेट लौटाता है, यदि संदर्भ नोड एक तत्व है):

यह नए XPath अक्षों की समीक्षा को समाप्त करता है। चलिए उदाहरणों पर चलते हैं।

रास्तों के उदाहरण

हमने स्थान के पथ सिद्धांत का पर्याप्त अध्ययन किया है। लेकिन, निश्चित रूप से, इस सामग्री को उदाहरणों के साथ सीखना सबसे अच्छा है, इसलिए मैं पथों के उदाहरणों की निम्न सूची देता हूं (इस सूची के बाद कम संस्करणों पर विचार किया जाता है):

  । संदर्भ नोड के बच्चों को लौटाता है; । संदर्भ नोड के सभी बाल पाठ नोड्स लौटाता है; । संदर्भ नोड के सभी बच्चों को लौटाता है; । संदर्भ नोड विशेषता लौटाता है; । संदर्भ नोड के सभी वंशज तत्व लौटाता है; । संदर्भ नोड के सभी पूर्वजों को लौटाता है; । संदर्भ नोड के पूर्वजों को लौटाता है। यदि संदर्भ नोड भी है, तो संदर्भ नोड भी वापस आ जाता है; । संदर्भ नोड के वंशज तत्व लौटाता है। यदि संदर्भ नोड भी है, तो संदर्भ नोड भी वापस आ जाता है; । यदि यह एक तत्व है, तो संदर्भ नोड लौटाता है;
बच्चा :: PLANET / वंशज :: NAME
। संदर्भ नोड के बच्चों के वंशज लौटाता है; । संदर्भ नोड के सभी पोते को लौटाता है; । रूट नोड लौटाता है; । दस्तावेज़ में सभी तत्व लौटाता है;
/ वंशज :: ग्रह / बालक :: नाम
। दस्तावेज़ में माता-पिता के साथ सभी आइटम लौटाता है; । संदर्भ नोड का तीसरा बच्चा लौटाता है;
बच्चा :: ग्रह
। संदर्भ नोड के अंतिम बच्चे को लौटाता है;
/ वंशज :: ग्रह
। दस्तावेज़ में तीसरा आइटम लौटाता है;
बच्चा :: ग्रह / बच्चा :: ग्रह / बच्चा :: नाम
। तत्व के चौथे तत्व के तीसरे तत्व को लौटाता है; । पहले तीन के बाद संदर्भ नोड के सभी बच्चों को लौटाता है;
पूर्ववर्ती- भाई-बहन :: NAME
। संदर्भ नोड का दूसरा पिछला भाई-बहन लौटाता है;
बच्चा :: *
। बच्चों और संदर्भ नोड लौटाता है।
बच्चा :: *
। अंतिम बच्चे या संदर्भ नोड लौटाता है।

जैसा कि आप देख सकते हैं, कुछ अभिव्यक्तियों का वाक्यविन्यास काफी भ्रामक है, और उन्हें टाइप करना भी काफी लंबा है। लेकिन, नमूनों के लिए, XPath सिंटैक्स का संक्षिप्त रूप है।

XPath संक्षिप्त वाक्य रचना

XPath सिंटैक्स संक्षिप्तीकरण काफी आसान हो सकता है। नीचे नियम हैं:

  के रूप में छोटा किया जा सकता है; के रूप में छोटा किया जा सकता है; के रूप में छोटा किया जा सकता है; के रूप में छोटा किया जा सकता है; के रूप में छोटा किया जा सकता है।

उदाहरण के लिए, स्थान पथ

  - के लिए कम
आत्म :: नोड () / वंशज-या-स्व :: नोड () / बच्चे :: ग्रह
। आप एक विधेय की अभिव्यक्ति को भी छोटा कर सकते हैं, जैसे, आदि। छोटे सिंटैक्स के साथ XPath पथ के साथ काम करना बहुत आसान है। निम्नलिखित सूची संक्षिप्त सिंटैक्स का उपयोग करके कई उदाहरण स्थान पथों को सूचीबद्ध करती है: संदर्भ नोड के बच्चों को लौटाता है; संदर्भ नोड के सभी बाल तत्व लौटाता है; संदर्भ नोड के सभी बाल पाठ नोड्स लौटाता है; संदर्भ नोड की विशेषता देता है; संदर्भ नोड की सभी विशेषताओं को लौटाता है; संदर्भ नोड का तीसरा बच्चा लौटाता है; संदर्भ नोड का अंतिम बच्चा लौटाता है; संदर्भ नोड के सभी पोते; तत्व के तीसरे तत्व का दूसरा तत्व लौटाता है; दस्तावेज़ रूट के सभी वंशज लौटाता है; संदर्भ नोड के बच्चे के तत्वों के वंशज रिटर्न; एक माता-पिता के पास सभी आइटम लौटाता है; संदर्भ नोड को ही वापस करता है; संदर्भ नोड के वंशज तत्व लौटाता है; संदर्भ नोड के माता-पिता को लौटाता है; संदर्भ नोड की मूल विशेषता लौटाता है; संदर्भ नोड के वंशज और संदर्भ नोड के माता-पिता के सभी माता-पिता; उन बच्चों के संदर्भ नोड लौटाता है जिनके बच्चे हैं; संदर्भ नोड के बच्चे लौटाते हैं जिनके पास "वीनस" के बराबर पाठ वाले बच्चे हैं; संदर्भ नोड के सभी बच्चों को लौटाता है जिसमें मूल्य के साथ एक विशेषता है ""; संदर्भ नोड के छठे बच्चे को केवल तभी लौटाता है जब इस बच्चे के पास "दिनों" के मूल्य के साथ एक विशेषता है। आप भी लिख सकते हैं; एक संदर्भ और विशेषता वाले नोड के सभी बच्चों को लौटाता है;
// योजना
"उन सभी तत्वों का चयन करता है, जिनका मूल्य किसी भी पिछले तत्व के मूल्य से भिन्न होता है, ऐसे किसी भी तत्व का चयन करता है, जो अपने माता-पिता की पहली संतान है, एक विशेषता वाले संदर्भ नोड के पहले पांच बच्चों का चयन करता है।

XPath अभिव्यक्ति की जाँच

Xalan पैकेज में एक आसान उदाहरण कार्यक्रम, ApplyXPath.java शामिल है, जो आपको एक दस्तावेज़ में XPath अभिव्यक्ति को लागू करने और परिणाम को देखने की अनुमति देता है, जो परीक्षण करते समय बहुत मदद करता है। इस उदाहरण को चलाने के लिए आपको संकलन करना होगा

  जावा वितरण में java.exe उपयोगिता के साथ।

एक उदाहरण के रूप में, मैं XPath अभिव्यक्ति का उपयोग करूंगा "

“की मदद से। नीचे वह परिणाम है जो उन सभी तत्वों को प्रदर्शित करता है जो तत्वों के बच्चे हैं (अप्लाक्सथ प्रोग्राम द्वारा जोड़े गए टैग):
% java ApplyXPath plan.xml PLANET / NAME
पाराशुक्रपृथ्वी

XPath 2.0

XPath को अपग्रेड किया जा रहा है और इसमें XSLT 2.0 (www.w3.org/TR/xpath20req देखें) का समर्थन शामिल है। XPath 2.0 कार्य निम्नानुसार हैं:

XML स्कीमा द्वारा समर्थित सामग्री प्रकारों के साथ संचालन को सरल बनाएं;

स्ट्रिंग सामग्री के साथ संचालन का सरलीकरण;

उचित XML मानकों के लिए समर्थन;

बेहतर प्रयोज्य;

बेहतर अंतर्संचालनीयता;

अंतर्राष्ट्रीय भाषा उपकरणों के लिए समर्थन में सुधार;

पिछड़ी संगतता को संरक्षित करना;

प्रोसेसर की दक्षता में वृद्धि।

निम्न सूची XPath आवश्यकताओं का अवलोकन देती है। मुख्य बिंदु XML स्कीमा और नियमित अभिव्यक्तियों के लिए समर्थन हैं, जो आपको स्ट्रिंग्स के साथ काम करने और स्ट्रिंग्स में खोज करने का साधन देता है। (नियमित अभिव्यक्तियों के बारे में अधिक जानकारी http://www.perldoc.com/perl5.6/pod/perlre.html पर प्राप्त की जा सकती है।) W3C के अनुसार, XPath 2.0:

XML परिवार में अन्य मानकों के साथ अच्छी तरह से व्याख्या करते हुए, W3C XML आर्किटेक्चर का समर्थन करना चाहिए;

XML सूचना सेट (इनसेट) के संदर्भ में अपना डेटा मॉडल व्यक्त करना चाहिए;

XSLT 2.0 और XML क्वेरी भाषा 1.0 के लिए सामान्य कुंजी सिंटैक्स प्रदान करना चाहिए;

स्पष्ट तुलना का समर्थन करना चाहिए "

"या" और समानता का वाक्य-विन्यास;

कई एकत्रीकरण कार्यों का विस्तार करना चाहिए (उदाहरण के लिए, XSLT उपयोगकर्ताओं को अक्सर सुविधाओं को जोड़ने की आवश्यकता होती है

  और);

XPath 1.0 के साथ पिछड़ी संगतता बनाए रखना चाहिए;

चौराहे और अंतर कार्यों को प्रदान करना चाहिए - अर्थात्, XPath 1.0 नोड्स के दो सेटों के संयोजन का समर्थन करता है, और चौराहे और अंतर कार्यों को इसमें जोड़ा जाना चाहिए;

यूनिरी प्लस ऑपरेशन का समर्थन करना चाहिए (चूंकि दशमलव संख्या में XML स्कीमा में अग्रणी प्लस हो सकता है);

प्रयोज्य में सुधार करना चाहिए;

स्थान चरणों पर प्रतिबंध कम करना चाहिए;

एक सशर्त ऑपरेशन को लागू करना चाहिए जो तीन अभिव्यक्तियों पर काम करता है - अभिव्यक्ति 1 (तार्किक ऑपरेशन), अभिव्यक्ति 2 और अभिव्यक्ति 3। यदि अभिव्यक्ति 1 मान "सत्य" लेता है, तो अभिव्यक्ति 2 की गणना की जानी चाहिए, और यदि अभिव्यक्ति 1 मान "झूठा", अभिव्यक्ति 3 लेता है ;

उप-संग्रह के लिए अनुक्रमिक सिंटैक्स को परिभाषित करना चाहिए जो तत्वों के संग्रह को संभालता है;

अतिरिक्त स्ट्रिंग फ़ंक्शंस का समर्थन करना चाहिए। उदाहरण के लिए, W3C स्ट्रिंग्स में प्रतिस्थापन के लिए धन जोड़ने, पात्रों में भरने और मामले के रूपांतरण पर विचार कर रहा है;

संग्रह पर लागू होने पर एकत्रीकरण कार्यों का समर्थन करना चाहिए। उदाहरण के लिए, कुछ XPath 1.0 उपयोगकर्ताओं को एक एकत्रीकरण फ़ंक्शन को लागू करने की आवश्यकता है जैसे कि

, नोड सेट पर लागू भावों के मूल्यों के लिए;

एक्सएमएल स्कीमा में निर्धारित नियमित अभिव्यक्ति अंकन का उपयोग करके स्ट्रिंग्स में खोज के लिए नियमित अभिव्यक्ति का समर्थन करना चाहिए;

प्राथमिक XML स्कीमा डेटा प्रकारों का समर्थन करना चाहिए। अर्थात्, XPath 1.0 डेटा मॉडल द्वारा समर्थित प्रकारों के अलावा - लाइन, संख्या, तार्किक मान और नोड्स का एक सेट - XPath 2.0 डेटा मॉडल को XML स्कीमा के प्राथमिक डेटा प्रकारों का समर्थन करना चाहिए;

एक XML स्कीमा द्वारा समर्थित एकल और दोहरे परिशुद्धता फ़्लोटिंग पॉइंट प्रतिनिधित्व का समर्थन करना चाहिए जो वैज्ञानिक अंकन का उपयोग करता है;

प्राथमिक XML स्कीमा डेटा प्रकारों के साथ काम करने के लिए उपयोगकर्ता के लिए उपयुक्त कार्यों को परिभाषित करना चाहिए;

XPath में "सूची" डेटा प्रकार जोड़ना होगा (क्योंकि XML स्कीमा आपको सूची से विरासत में दिए गए सरल प्रकारों को परिभाषित करने की अनुमति देता है);

सरल तत्व प्रकारों और विशेषताओं के मूल्यों तक पहुंच का समर्थन करना चाहिए। क्योंकि XML स्कीमा कई नए प्रकारों का प्रतिनिधित्व करते हैं, XPath 2.0 को अपने स्वयं के, सरल प्रकार, तत्व या विशेषता मान तक पहुंच का समर्थन करना चाहिए;

अशक्त तर्कों के लिए ऑपरेटरों के व्यवहार को परिभाषित करना चाहिए;

एक स्पष्ट XML स्कीमा प्रकार के आधार पर तत्वों या विशेषताओं का चयन करने का साधन होना चाहिए;

XML स्कीमा प्रकारों के पदानुक्रम के आधार पर तत्वों या विशेषताओं का चयन करने का साधन होना चाहिए;

XML स्कीमा प्रतिस्थापन समूहों के आधार पर तत्वों का चयन करने का साधन होना चाहिए;

अद्वितीय बाधाओं और स्कीमा कुंजी के आधार पर खोज टूल का समर्थन करना चाहिए।

हालाँकि हम अध्याय के अंत में आए हैं, लेकिन XPath के बारे में सब कुछ नहीं कहा गया है। विषय को अगले अध्याय में जारी रखा जाएगा, जिसमें हम XPath में उपलब्ध कार्यों और कार्यों पर करीब से नज़र डालते हैं जो पहले से ही XSLT में निर्मित हैं।

Xpath xml या xhtml डॉक्यूमेंट एलिमेंट को क्वेरी करने के लिए एक भाषा है। SQL की तरह, xpath एक घोषणात्मक क्वेरी भाषा है। ब्याज का डेटा प्राप्त करने के लिए, आपको बस एक क्वेरी बनाने की आवश्यकता है जो इस डेटा का वर्णन करती है। आपके लिए सभी "ब्लैक" कार्य दुभाषिया भाषा xpath का प्रदर्शन करेंगे।
  बहुत सहज है, है ना? आइए देखें कि वेब पेज नोड्स तक पहुंचने के लिए xpath में क्या विशेषताएं हैं।

वेब पेज नोड्स के लिए एक अनुरोध बनाना

  मैं आपके ध्यान में एक छोटी प्रयोगशाला का काम लाता हूं, जिसके दौरान मैं एक वेब पेज पर xpath अनुरोधों के निर्माण का प्रदर्शन करूंगा। आप उन अनुरोधों को दोहरा पाएंगे जो मैंने उद्धृत किए हैं और सबसे महत्वपूर्ण बात यह है कि आप अपने स्वयं के पूरा करने का प्रयास करेंगे। मुझे उम्मीद है कि इस लेख के लिए धन्यवाद xpath xml से परिचित शुरुआती और प्रोग्रामर के लिए समान रूप से दिलचस्प होगा।

प्रयोगशाला के लिए, हमें चाहिए:
   - वेब पेज xhtml;
   - ऐड-ऑन के साथ मोज़िला फ़ायरफ़ॉक्स ब्राउज़र;
   - फायरबग;
   - फायरपथ;
   (आप xpath के दृश्य समर्थन वाले किसी अन्य ब्राउज़र का उपयोग कर सकते हैं)
   - थोड़ा समय।

प्रयोग के लिए एक वेब पेज के रूप में, मैं वर्ल्ड वाइड वेब कंसोर्टियम ("http://w3.org") की वेबसाइट के मुख्य पृष्ठ का प्रस्ताव करता हूं। यह संगठन है जो xquery भाषाओं (xpath), xHTML विनिर्देश और कई अन्य इंटरनेट मानकों को विकसित करता है।

कार्य
  XHTML कोड से प्राप्त करें मुख्य पृष्ठ  w3.org xpath प्रश्नों का उपयोग करके कंसोर्टियम सम्मेलनों के बारे में जानकारी।
  आइए xpath अनुरोध लिखना शुरू करें।
पहला xpath अनुरोध
  FireBug में Firepath टैब खोलें, चयनकर्ता के साथ विश्लेषण के लिए तत्व का चयन करें, क्लिक करें: Firepath ने चयनित तत्व के लिए एक xpath अनुरोध बनाया।

यदि आपने पहली घटना का शीर्षक चुना है, तो अनुरोध इस प्रकार होगा:

   / ए

अतिरिक्त अनुक्रमित को निकालने के बाद, अनुरोध "शीर्षक" प्रकार के सभी तत्वों से मेल खाएगा।

फायरपाथ क्वेरी से मेल खाने वाली वस्तुओं को हाइलाइट करता है। आप वास्तविक समय में देख सकते हैं कि कौन सा दस्तावेज़ नोड अनुरोध से मेल खाता है।

सम्मेलन स्थलों के बारे में जानकारी के लिए अनुरोध:
   .//*[@id="w3c_home_upcoming_events"]/ul/li/div/p

इसलिए हमें प्रायोजकों की एक सूची मिलती है:
   .//*[@id="w3c_home_upcoming_events"]/ul/li/div/p

Xpath सिंटैक्स

  आइए निर्मित प्रश्नों पर वापस जाएं और देखें कि वे कैसे काम करते हैं।
  पहले अनुरोध पर विस्तार से विचार करें

इस क्वेरी में, मैंने xpath की क्षमताओं को प्रदर्शित करने के लिए तीन भागों पर प्रकाश डाला। (भागों में विभाजन पकड़ रहा है)

पहला भाग
.//   - वर्तमान संदर्भ से शून्य या अधिक पदानुक्रम स्तर तक पुनरावर्ती वंश। हमारे मामले में, वर्तमान संदर्भ दस्तावेज़ जड़ है।

दूसरा भाग
*   - कोई भी वस्तु
[@ आईडी = "w3c_home_upcoming_events"] - विधेय, जिसके आधार पर हम एक नोड की खोज करते हैं, जिसमें "W3c_home_upcoming_events" के बराबर आईडी विशेषता होती है। XHTML तत्व पहचानकर्ता अद्वितीय होना चाहिए। इसलिए, क्वेरी "किसी विशिष्ट आईडी के साथ कोई भी आइटम" केवल उसी नोड को वापस करना चाहिए जिसे हम खोज रहे हैं।

हम बदल सकते हैं *   सटीक नोड नाम के लिए div  इस अनुरोध में
   div [@ id = "w3c_home_upcoming_events"]

इस प्रकार, हम दस्तावेज़ के पेड़ के माध्यम से आवश्यक नोड div [@ id = "w3c_home_upcoming_events/] पर उतरते हैं। हम पूरी तरह से परवाह नहीं करते हैं कि DOM ट्री में क्या नोड्स हैं और पदानुक्रम के कितने स्तर ऊपर हैं।

तीसरा भाग
/ उल / ली / दिव / पी / ए  एक विशिष्ट तत्व के लिए -Xpath पथ। पथ में संबोधित करने के चरणों और नोड्स (उल, ली, आदि) की स्थिति शामिल है। चरणों को "/" (स्लैश) द्वारा अलग किया जाता है।

Xpath संग्रह
  सदैव विधेय या संबोधन चरणों का उपयोग करके ब्याज की मात्रा तक पहुँचना संभव नहीं है। बहुत बार, पदानुक्रम के समान स्तर पर, संभव के समान प्रकार के कई नोड होते हैं और "केवल पहले" या "केवल दूसरे" नोड्स का चयन करना आवश्यक होता है। ऐसे मामलों के लिए, संग्रह प्रदान किए जाते हैं।

Xpath संग्रह आपको किसी आइटम को उसके सूचकांक द्वारा एक्सेस करने की अनुमति देता है। सूचकांक उस क्रम के अनुरूप हैं जिसमें मूल दस्तावेज में तत्व प्रस्तुत किए गए थे। संग्रह में अनुक्रम संख्या एक से गिना जाता है।

इस तथ्य के आधार पर कि "सम्मेलन शीर्षक" के बाद "स्थल" हमेशा दूसरा पैराग्राफ होता है, हमें निम्नलिखित अनुरोध मिलता है:
   .//*[@id="w3c_home_upcoming_events"]/ul/li/div/p
  जहाँ p सूची के प्रत्येक नोड / ul / li / div के लिए सेट में दूसरा तत्व है।

इसी तरह, हम पूछ कर प्रायोजकों की एक सूची प्राप्त कर सकते हैं:
   .//*[@id="w3c_home_upcoming_events"]/ul/li/div/p

कुछ XPath फ़ंक्शंस
  XPath में संग्रह के भीतर वस्तुओं के साथ काम करने के लिए कई कार्य हैं। मैं उनमें से कुछ को ही दूंगा।

अंतिम ():
  संग्रह में अंतिम आइटम देता है।
  क्वेरी ul / li / div / p - सूची के प्रत्येक नोड "ul" के लिए अंतिम पैराग्राफ लौटाएगा।
  पहला () फ़ंक्शन प्रदान नहीं किया गया है। पहले तत्व तक पहुंचने के लिए, इंडेक्स "1" का उपयोग करें।

पाठ ():
  आइटम की परीक्षण सामग्री लौटाता है।
   .//a - हमें "पुरालेख" पाठ के साथ सभी लिंक मिलते हैं।

स्थिति () और मॉड:
  स्थिति () - सेट में तत्व की स्थिति लौटाता है।
  mod विभाजन का शेष भाग है।

इन कार्यों को मिलाकर हम प्राप्त कर सकते हैं:
   - उल / ली तत्व भी नहीं
   - यहां तक ​​कि तत्व: उल / ली

तुलना संचालन

  • < - логическое «меньше»
  • \u003e - तार्किक "अधिक"
  • <= - логическое «меньше либо равно»
  • \u003e = - तार्किक "से बड़ा या बराबर"
   उल / ली, उल / ली - 3 नंबर से शुरू होने वाली वस्तुओं की सूची और इसके विपरीत।

XPath एक XML दस्तावेज़ में नोड्स और नोड सेट का चयन करने के लिए पथ अभिव्यक्तियों का उपयोग करता है। नोड का चयन किसी दिए गए पथ या तथाकथित चरणों का पालन करके किया जाता है।

नमूना XML दस्तावेज़

XPath सिंटैक्स प्रदर्शित करने के लिए निम्न XML दस्तावेज़ का उपयोग किया जाएगा:

अनुस्मारक एक पत्र भेजें! पुन: स्मरण ईमेल भेजा गया

नोड चयन

XML दस्तावेज़ में नोड्स का चयन करने के लिए, XPath पथ अभिव्यक्तियों का उपयोग करता है। निर्दिष्ट पथ के बाद नोड का चयन किया जाता है। सबसे उपयोगी पथ अभिव्यक्ति हैं:

निम्न तालिका कुछ XPath अभिव्यक्तियों को सूचीबद्ध करती है जो आपको नमूना XML दस्तावेज़ पर कुछ चयन करने की अनुमति देती हैं:

XPath अभिव्यक्ति परिणाम
संदेशों "संदेश" नाम के साथ सभी नोड्स का चयन करता है
/ संदेश संदेशों के मूल तत्व का चयन करता है।
टिप्पणी: यदि मार्ग स्लैश (/) से शुरू होता है, तो यह हमेशा प्रतिनिधित्व करता है निरपेक्ष मार्ग  तत्व को!
संदेश / नोट उन सभी नोट तत्वों का चयन करता है जो संदेश तत्व के वंशज हैं।
// नोट सभी नोट तत्वों का चयन करता है, चाहे वे दस्तावेज़ में कहीं भी हों।
संदेश // नोट उन सभी नोट तत्वों का चयन करता है, जो संदेश तत्व के वंशज हैं, भले ही वे संदेश तत्व के हैं।
// @ तारीख नामित सभी विशेषताओं का चयन करता है

विधेय

विधेय आपको एक विशिष्ट मान के साथ एक विशिष्ट नोड या एक नोड खोजने की अनुमति देता है।

हमेशा चौकोर कोष्ठक में संलग्न होते हैं।

निम्न सारणी कुछ XPath अभिव्यक्तियों को विधेय के साथ सूचीबद्ध करती है जो आपको एक नमूना XML दस्तावेज़ पर चयन करने की अनुमति देते हैं:

XPath अभिव्यक्ति परिणाम
/ संदेश / नोट पहले नोट तत्व का चयन करता है, जो संदेश तत्व का प्रत्यक्ष वंशज है।
टिप्पणीए: IE 5,6,7,8,9 में, पहला नोड होगा, लेकिन डब्ल्यू 3 सी के अनुसार यह होना चाहिए। IE में इस समस्या को हल करने के लिए, आपको XPL मान के लिए SelectionLanguage विकल्प सेट करने की आवश्यकता है।
  जावास्क्रिप्ट में: xml.setProperty ("SelectionLanguage", "XPath");
/ संदेश / नोट अंतिम नोट तत्व का चयन करता है, जो संदेश तत्व का सीधा वंशज है।
/ संदेश / नोट प्रचलित नोट तत्व का चयन करता है, जो संदेश तत्व का प्रत्यक्ष वंशज है।
/ संदेश / नोट उन सभी शीर्षक तत्वों का चयन करता है, जिनमें दिनांक विशेषता होती है।
// शीर्षक [@ तारीख = "10/01/2008"] "10/01/2008" मान के साथ दिनांक विशेषता वाले सभी शीर्षक तत्वों का चयन करता है

अग्रिम में अज्ञात समुद्री मील का चयन

पहले अज्ञात XML दस्तावेज़ नोड्स को खोजने के लिए, XPath विशेष वर्णों के उपयोग की अनुमति देता है।

निम्न तालिका विशेष पात्रों के साथ कुछ XPath अभिव्यक्तियों को सूचीबद्ध करती है जो आपको नमूना XML दस्तावेज़ पर चयन करने की अनुमति देते हैं:

एकाधिक पथ चयन

संचालक उपयोग | XPath अभिव्यक्ति में आप कई मायनों में चुनाव करने की अनुमति देता है।

निम्न तालिका कुछ XPath अभिव्यक्तियों को सूचीबद्ध करती है जो आपको एक नमूना XML दस्तावेज़ पर चयन करने की अनुमति देती है।

यह अध्याय कुछ उदाहरणों के आधार पर मूल XPath सिंटैक्स प्रदर्शित करता है।

नमूना XML दस्तावेज़

निम्न XML दस्तावेज़ एक उदाहरण के रूप में इस्तेमाल किया जाएगा:

अनुस्मारक एक पत्र भेजें! 4 पुन: स्मरण ईमेल भेजा गया 7

XML दस्तावेज़ लोड हो रहा है

XML दस्तावेज़ डाउनलोड करने के लिए, XMLHttpRequest ऑब्जेक्ट का उपयोग करें, जो सभी प्रमुख ब्राउज़रों द्वारा समर्थित है।

वार xmlhttp = नया XMLHttpRequest ();

पुराने Microsoft ब्राउज़रों में (IE 5 और 6) कोड का उपयोग किया जाता है:

Var xmlhttp = new ActiveXObject ("Microsoft.XMLHTTP");

नोड चयन

दुर्भाग्य से, विभिन्न ब्राउज़र XPath के साथ काम करने के विभिन्न तरीकों का समर्थन करते हैं।

क्रोम, फ़ायरफ़ॉक्स, एज, ओपेरा और सफारी नोड्स का चयन करने के लिए मूल्यांकन () विधि का उपयोग करते हैं:

XmlDoc.ev मूल्यांकन (xpath, xmlDoc, , XpathResult.ANY_TYPE, null);

Internet Explorer चयन विधि () विधि का उपयोग करता है:

XmlDoc.selectNodes (xpath);

सभी हेडर का चयन करें

निम्नलिखित उदाहरण सभी शीर्षक नोड्स का चयन करता है:

   / संदेश / नोट / शीर्षक

पहले नोट के शीर्षक का चयन करें

निम्न उदाहरण संदेश तत्व के नोट तत्व में पहले नोड के लिए शीर्षक शीर्षक का चयन करता है:

   / संदेश / नोट / शीर्षक

सभी विभागों का चयन

निम्नलिखित उदाहरण सभी डेस्क साइटों से पाठ का चयन करता है:

   / संदेश / नोट / डेस्क

4 से अधिक की संख्या के साथ विभाग चुनें

निम्नलिखित उदाहरण में, सभी डेस्क नोड्स चुने गए हैं जिनका मूल्य 4 से अधिक है:

   / संदेश / नोट / डेस्क

4 से अधिक संख्या वाले विभागों के लिए नोट शीर्षकों का चयन करें

निम्नलिखित उदाहरण उन नोट नोड्स के सभी शीर्षक नोड्स का चयन करता है जिनके डेस्क तत्व का मूल्य 4 से अधिक है:

   / संदेश / नोट / शीर्षक