संक्षिप्त XPath सिंटैक्स. निम्नलिखित अक्ष का उपयोग करके html में xpath क्वेरीज़ के उदाहरण

XPath का उपयोग XML दस्तावेज़ के तत्वों और विशेषताओं के माध्यम से नेविगेट करने के लिए किया जाता है। XPath W3C XSLT मानक के मुख्य तत्वों में से एक है।

1 क्या हुआ हैएक्सपाथ

एक्सपाथ अभिव्यक्तियाँ

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

मानक XPath फ़ंक्शंस

XPath में 100 से अधिक अंतर्निहित फ़ंक्शन शामिल हैं। स्ट्रिंग और संख्यात्मक मान, दिनांक और समय, नोड तुलना और QName हेरफेर, अनुक्रम प्रबंधन, बूलियन मान और बहुत कुछ के लिए फ़ंक्शन हैं।

XPath का उपयोग XSLT में किया जाता है

XPath XSLT मानक के मुख्य तत्वों में से एक है। XPath के ज्ञान के बिना, आप XSLT दस्तावेज़ नहीं बना पाएंगे।

2 शब्दावलीएक्सपाथ

नोड्स

XPath में सात प्रकार के नोड हैं: तत्व, विशेषता, पाठ, नामस्थान, प्रसंस्करण निर्देश, टिप्पणियाँ और दस्तावेज़ नोड्स। XML दस्तावेज़ों को नोड्स के पेड़ के रूप में संसाधित किया जाता है। वृक्ष के शीर्ष तत्व को जड़ तत्व कहा जाता है। निम्नलिखित XML दस्तावेज़ देखें:

हैरी पॉटर जेके रॉउलिंग 2005 29.99

उपरोक्त XML दस्तावेज़ में उदाहरण नोड्स:

(मूल तत्व) जेके रॉउलिंग (नोड) लैंग='एन'(गुण)

परमाणु मूल्य

परमाणु मान वे नोड होते हैं जिनकी कोई संतान या माता-पिता नहीं होते हैं। परमाणु मूल्यों का उदाहरण:

जे. के. राउलिंग "एन"

तत्वों

तत्व परमाणु मान या नोड हैं।

3 संबंधनोड्स

माता-पिता

प्रत्येक तत्व और विशेषता का एक अभिभावक होता है। निम्नलिखित उदाहरण में, पुस्तक तत्व शीर्षक, लेखक, वर्ष और मूल्य तत्वों का जनक है:

हैरी पॉटर जेके रॉउलिंग 2005 29.99

वंशज

तत्व नोड्स में शून्य, एक या अधिक बच्चे हो सकते हैं। निम्नलिखित उदाहरण में, तत्व "शीर्षक", "लेखक", "वर्ष" और "मूल्य" सभी पुस्तक तत्व के बच्चे हैं:

हैरी पॉटर जेके रॉउलिंग 2005 29.99

समान स्तर के तत्व

ये ऐसे नोड हैं जिनका पैरेंट एक ही है। निम्नलिखित उदाहरण में, तत्व "शीर्षक", "लेखक", "वर्ष" और "मूल्य" सभी समान स्तर के तत्व हैं:

हैरी पॉटर जेके रॉउलिंग 2005 29.99

पूर्वज

नोड के माता-पिता, नोड के माता-पिता के माता-पिता, आदि। निम्नलिखित उदाहरण में, शीर्षक तत्व के पूर्वज पुस्तक और किताबों की दुकान के तत्व हैं:

हैरी पॉटर जेके रॉउलिंग 2005 29.99

वंशज

एक नोड के बच्चे, एक नोड के बच्चे के बच्चे, आदि। निम्नलिखित उदाहरण में, "किताबों की दुकान" तत्व के बच्चे तत्व "पुस्तक", "शीर्षक", "लेखक", "वर्ष" और "मूल्य" हैं:

हैरी पॉटर जेके रॉउलिंग 2005 29.99

4 वाक्य - विन्यासएक्सपाथ

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

हैरी पॉटर 29.99 एक्सएमएल सीखना 39.95

नोड चयन

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

नीचे दी गई तालिका कुछ अभिव्यक्ति पथों और अभिव्यक्ति को निष्पादित करने के परिणाम को सूचीबद्ध करती है:

एक्सपाथ अभिव्यक्ति परिणाम
किताबों की दुकान "किताबों की दुकान" नामक सभी नोड्स का चयन करता है
/किताबों की दुकान किताबों की दुकान के मूल तत्व का चयन करता है

टिप्पणी:यदि कोई पथ स्लैश (/) से शुरू होता है, तो यह हमेशा तत्व के लिए एक पूर्ण पथ होता है!

किताबों की दुकान/किताब उन सभी "पुस्तक" तत्वों का चयन करता है जो "किताबों की दुकान" तत्व के बच्चे हैं
//किताब सभी "पुस्तक" तत्वों का चयन करता है, चाहे वे दस्तावेज़ में कहीं भी हों
किताबों की दुकान//किताब उन सभी "पुस्तक" तत्वों का चयन करता है जो "किताबों की दुकान" तत्व के बच्चे हैं, भले ही वे "किताबों की दुकान" तत्व के अंतर्गत कहीं भी हों
//@लैंग "लैंग" नाम वाली सभी विशेषताओं का चयन करता है

विधेय

विधेय का उपयोग एक विशिष्ट नोड या एक नोड को खोजने के लिए किया जाता है जिसमें एक विशिष्ट मान होता है। विधेय हमेशा वर्गाकार कोष्ठकों से घिरे होते हैं। नीचे दी गई तालिका विधेय के साथ कुछ पथ अभिव्यक्तियों और अभिव्यक्ति के परिणाम को सूचीबद्ध करती है:

एक्सपाथ अभिव्यक्तियाँ परिणाम
/किताबों की दुकान/किताब पहले "पुस्तक" तत्व का चयन करता है, जो "किताबों की दुकान" तत्व का एक बच्चा है।

टिप्पणी: IE 5,6,7,8,9 में, पहले नोड का सूचकांक है, लेकिन W3C दिशानिर्देशों के अनुसार, यह है। IE में इस समस्या को हल करने के लिए, XPath के लिए "चयनभाषा" विकल्प सेट करें:

जावास्क्रिप्ट में: xml.setProperty ("चयनभाषा", "XPath");
/किताबों की दुकान/किताब अंतिम "पुस्तक" तत्व का चयन करता है जो "किताबों की दुकान" तत्व का एक बच्चा है
/किताबों की दुकान/किताब अंतिम "पुस्तक" तत्व का चयन करता है, जो "किताबों की दुकान" तत्व का एक बच्चा है
/किताबों की दुकान/किताब पहले दो "पुस्तक" तत्वों का चयन करना जो "किताबों की दुकान" तत्व के बच्चे हैं
//शीर्षक[@lang] उन सभी "शीर्षक" तत्वों का चयन करता है जिनमें "लैंग" नामक विशेषता होती है
//शीर्षक[@lang='en'] उन सभी "शीर्षक" तत्वों का चयन करता है जिनमें "एन" के मान के साथ "भाषा" विशेषता होती है
/किताबों की दुकान/किताब "किताबों की दुकान" तत्व के बाद सभी "पुस्तक" तत्वों का चयन करता है जिनमें 35.00 से अधिक मूल्य वाला "मूल्य" तत्व होता है
/किताबों की दुकान/पुस्तक/शीर्षक "किताबों की दुकान" तत्व के सभी पुस्तक "शीर्षक" तत्वों का चयन करता है जिनमें 35.00 से अधिक मूल्य वाला "मूल्य" तत्व होता है

अज्ञात नोड्स का चयन करना

अज्ञात XML नोड्स का चयन करने के लिए XPath विशेष वर्णों का उपयोग किया जा सकता है।

नीचे दी गई तालिका में, हमने कुछ अभिव्यक्ति पथ और अभिव्यक्ति परिणाम सूचीबद्ध किए हैं:

एकाधिक पथों का चयन करना

ऑपरेटर का उपयोग करना | XPath अभिव्यक्तियों में आप अनेक पथों का चयन कर सकते हैं. नीचे दी गई तालिका कई पथ अभिव्यक्तियों और उनके परिणामों को सूचीबद्ध करती है:

5 एक्सेलएक्सपाथ

हम बाद में उदाहरण में निम्नलिखित XML दस्तावेज़ का उपयोग करेंगे।

हैरी पॉटर 29.99 एक्सएमएल सीखना 39.95

अक्ष वर्तमान नोड के सापेक्ष नोड्स के सेट को परिभाषित करते हैं।

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

6 अभिव्यक्तिनमूना पथ

स्थान पथ निरपेक्ष या सापेक्ष हो सकता है. एक निरपेक्ष स्थान पथ एक स्लैश (/) से शुरू होता है, लेकिन एक सापेक्ष पथ ऐसा नहीं करता है। दोनों मामलों में, नमूना पथ में स्लैश द्वारा अलग किए गए एक या अधिक चरण होते हैं:

पूर्ण स्थान पथ:

/कदम/कदम/...

सापेक्ष स्थान लाने का पथ:

कदम/कदम/...

प्रत्येक चरण का मूल्यांकन वर्तमान नोड सेट में नोड्स के विरुद्ध किया जाता है। चरण में निम्न शामिल हैं:

  • अक्ष (चयनित नोड्स और वर्तमान नोड के बीच वृक्ष संबंध को परिभाषित करता है);
  • नोड जाँच (एक अक्ष के भीतर एक नोड की पहचान करता है);
  • शून्य या अधिक विधेय (नोड्स के चयनित सेट को और अधिक परिष्कृत करने के लिए)

फ़ेच चरण सिंटैक्स है:

एक्सिसनाम::नोडटेस्टएक्सिसनाम::नोडटेस्ट[भविष्यवक्ता]

उदाहरण परिणाम
बच्चा::किताब सभी पुस्तक नोड्स का चयन करता है जो वर्तमान नोड के बच्चे हैं
विशेषता::लैंग वर्तमान नोड की भाषा विशेषता (लैंग) का चयन करता है
बच्चा::* वर्तमान नोड के सभी बच्चों का चयन करता है
गुण::* वर्तमान नोड की सभी विशेषताओं का चयन करता है
बच्चा::पाठ() वर्तमान नोड के सभी टेक्स्ट नोड्स का चयन करता है
बच्चा::नोड() वर्तमान नोड के सभी तत्काल बच्चों का चयन करता है
वंशज::पुस्तक वर्तमान नोड के सभी बच्चों का चयन करता है
पूर्वज::पुस्तक वर्तमान नोड की "पुस्तकों" के सभी पूर्वजों का चयन करता है
पूर्वज-या-स्वयं::पुस्तक वर्तमान नोड के सभी पुस्तक पूर्वजों का चयन करता है - और वर्तमान नोड यदि यह भी एक पुस्तक है
बच्चा::*/बच्चा::कीमत वर्तमान नोड से एक स्तर दूर "मूल्य" के सभी बच्चों का चयन करता है

7 ऑपरेटर्सएक्सपाथ

XPath अभिव्यक्तियाँ नोड्स, स्ट्रिंग्स, बूलियन या संख्यात्मक मानों के एक सेट के रूप में लौटती हैं। XPath अभिव्यक्तियों में प्रयुक्त ऑपरेटरों की सूची नीचे दी गई है:

ऑपरेटर विवरण उदाहरण
| नोड्स के दो सेट की गणना करता है //पुस्तक | //सीडी
+ जोड़ना 6 + 4
- घटाव 6 - 4
* गुणा 6 * 4
डिव विभाजन 8 डिव 4
= समानता कीमत=9.80
!= असमानता कीमत!=9.80
< से कम कीमत<9.80
<= कम या बराबर कीमत≤9.80
> इससे अधिक कीमत>9.80
>= अधिक या बराबर कीमत≤9.80
या या कीमत=9.80 या कीमत=9.70
और और कीमत>9.00 और कीमत<9.90
आधुनिक विभाजन का शेष भाग 5 मॉड 2

8 उदाहरणएक्सपाथ

आइए कुछ उदाहरणों के साथ मूल XPath सिंटैक्स पर चलें। हम नीचे दिए गए उदाहरणों में निम्नलिखित XML दस्तावेज़ "books.xml" का उपयोग करेंगे:

हर दिन इतालवी गिआडा डी लॉरेंटिस 2005 30.00 हैरी पॉटर जेके रॉउलिंग 2005 29.99 XQuery किक स्टार्ट जेम्स मैकगवर्न प्रति बोथनर कर्ट कैगल जेम्स लिन वैद्यनाथन नागराजन 2003 49.99 एक्सएमएल सीखना एरिक टी. रे 2003 39.95

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

XML दस्तावेज़ डाउनलोड करने के लिए XMLHttpRequest का उपयोग करें, जो अधिकांश आधुनिक ब्राउज़रों द्वारा समर्थित है:

वर xmlhttp=नया XMLHttpRequest()

लीगेसी Microsoft ब्राउज़र के लिए कोड (IE 5 और 6):

वर xmlhttp=नया ActiveXObject('Microsoft.XMLHTTP')

नोड चयन

दुर्भाग्य से, XPath अन्य ब्राउज़रों की तुलना में इंटरनेट एक्सप्लोरर में अलग तरह से काम कर सकता है। हमारे उदाहरणों में हम उस कोड का उपयोग करेंगे जो अधिकांश ब्राउज़रों में काम करना चाहिए। इंटरनेट एक्सप्लोरर XML दस्तावेज़ में नोड्स का चयन करने के लिए "selectNodes()" विधि का उपयोग करता है:

XmlDoc.selectNodes(xpath);

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

XmlDoc.evaluate(xpath, xmlDoc, null, XPathResult.ANY_TYPE, null);

सभी शीर्षक चुनें

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

/किताबों की दुकान/पुस्तक/शीर्षक

पहली पुस्तक का शीर्षक चुनना

निम्नलिखित उदाहरण "बुकस्टोर" तत्व के बाद पहले "पुस्तक" नोड का शीर्षक चुनता है:

/किताबों की दुकान/पुस्तक/शीर्षक

सभी कीमतें चुनें

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

/किताबों की दुकान/किताब/कीमत

>35 मूल्य वाले नोड्स का चयन करता है

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

/किताबों की दुकान/किताब/कीमत

कीमत >35 के साथ हेडर नोड्स का चयन करना

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

/किताबों की दुकान/पुस्तक/शीर्षक

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

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

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

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

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

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

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

अनावश्यक अनुक्रमणिका को हटाने के बाद, क्वेरी हेडर प्रकार के सभी तत्वों से मेल खाएगी।

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

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

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

xpath सिंटेक्स

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

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

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

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

हम प्रतिस्थापित कर सकते हैं * सटीक नोड नाम के लिए डिवइस अनुरोध में
div[@id='w3c_home_upcoming_events']

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

तीसरा भाग
/ul/li/div/p/a-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" का उपयोग करें।

मूलपाठ():
किसी तत्व की परीक्षण सामग्री लौटाता है।
.//ए - हमें "संग्रह" पाठ के साथ सभी लिंक मिलते हैं।

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

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

तुलनात्मक संचालन

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

अपने आप

प्राप्त करने की कोशिश:
- बाएं मेनू "मानक" से भी यूआरएल लिंक;
- w3c.org के मुख्य पृष्ठ से पहले समाचार को छोड़कर सभी समाचारों के शीर्षलेख।

PHP5 में एक्सपैथ

$dom = नया DomDocument(); $dom->loadHTML($HTMLCode); $xpath = नया DomXPath($dom); $_res = $xpath->query('.//*[@id='w3c_home_upcoming_events']/ul/li/div/p/a'); foreach($_res => $obj) ( echo "URL: ".$obj->getAttribute("href"); echo $obj->nodeValue; )

अंत में

एक सरल उदाहरण का उपयोग करते हुए, हमने वेब पेज नोड्स तक पहुंचने के लिए xpath की क्षमताओं को देखा।
Xpath, xml तत्वों और xhtml, xslt परिवर्तनों तक पहुँचने के लिए उद्योग मानक है।
आप इसका उपयोग किसी भी html पेज को पार्स करने के लिए कर सकते हैं। यदि स्रोत HTML कोड में मार्कअप में महत्वपूर्ण त्रुटियाँ हैं, तो इसे चलाएँ

आज हम PHP के साथ XPath का उपयोग करने के विषय पर करीब से नज़र डालेंगे। आप उदाहरणों में देखेंगे कि कैसे XPath कोड की मात्रा को काफी कम कर देता है। आइए XPath में क्वेरीज़ और फ़ंक्शंस का उपयोग देखें।

शुरुआत में, मैं आपको दो प्रकार के दस्तावेज़ प्रदान करूंगा: DTD और XML, जिनका उपयोग करके हम PHP DOM XPath की कार्यप्रणाली को देखेंगे। वे इस तरह दिखते हैं:

एक किताब एक लेखक डरावनी अध्याय एक एक और किताब एक और लेखक कल्पित विज्ञान अध्याय एक

बुनियादी XPath क्वेरीज़

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

//पुस्तकालय किताब

इस कदर! दो फॉरवर्ड स्लैश दस्तावेज़ के मूल तत्व को परिभाषित करते हैं, और एक फॉरवर्ड स्लैश पुस्तक चाइल्ड तत्व में परिवर्तित हो जाता है। यह सरल और तेज़ है, है ना?

लेकिन क्या होगा यदि आप किसी सेट से एक विशिष्ट पुस्तक तत्व का चयन करना चाहते हैं? आइए मान लें कि आप किसी "निश्चित लेखक" की पुस्तकें चाहते हैं। इसके लिए XPath क्वेरी होगी:

//पुस्तकालय/पुस्तक/लेखक/..

आप उपयोग कर सकते हैं मूलपाठ()नोड मान की तुलना करने के लिए वर्गाकार कोष्ठकों में। भी «/..» इसका मतलब है कि हम मूल तत्व का उपयोग करना चाहते हैं (यानी ऊपर एक नोड पर वापस जाएं)।

XPath क्वेरीज़ एक या दो फ़ंक्शंस का उपयोग करके बनाई जाती हैं: सवाल()और मूल्यांकन करना(). दोनों एक अनुरोध बनाते हैं, लेकिन अंतर लौटाए गए परिणाम में है। क्वेरी() हमेशा वापस आएगी DOMNode सूची, विपरीत मूल्यांकन करना()यदि संभव हो तो एक पाठ परिणाम लौटाएगा। उदाहरण के लिए, यदि आपकी XPath क्वेरी किसी विशेष लेखक द्वारा लिखी गई पुस्तकों की संख्या लौटाएगी, तो query() एक खाली DOMNodeList लौटाएगा, मूल्यांकन() बस एक संख्या लौटाएगा, आप इसका उपयोग सीधे नोड से डेटा पुनर्प्राप्त करने के लिए कर सकते हैं .

XPath कोड और स्पीड लाभ

आइए एक सरल उदाहरण देखें जो किसी विशिष्ट लेखक द्वारा लिखी गई पुस्तकों की संख्या लौटाएगा। हम XPath का उपयोग किए बिना पहली विधि को वैसे ही देखेंगे जैसे हम हमेशा करते हैं। अब आप समझ जाएंगे कि XPath के बिना यह कैसे करना है और XPath के साथ यह करना कितना आसान है।

domDocument->getElementsByTagName("लेखक"); foreach ($elements as $element) ( if ($element->nodeValue == $author) ($ total++; ) ) return $number; )

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

डोम दस्तावेज़); $परिणाम = $xpath->क्वेरी($क्वेरी); वापसी $परिणाम->लंबाई; )

ध्यान दें कि प्रत्येक पुस्तक को किस लेखक ने लिखा है, यह निर्धारित करने के लिए हमें प्रत्येक तत्व के मान की दोबारा जाँच करने की आवश्यकता नहीं है। लेकिन हम XPath फ़ंक्शन का उपयोग करके कोड को और अधिक सरल बना सकते हैं गिनती करना()इस पथ में तत्वों की सामग्री की गणना करने के लिए।

डोम दस्तावेज़); वापसी $xpath->मूल्यांकन($query); )

हम अपनी आवश्यक जानकारी एक पंक्ति XPath क्वेरी से प्राप्त कर सकते हैं। बहुत सारे PHP फ़िल्टर बनाने की आवश्यकता नहीं है। इस कार्यक्षमता को लिखने का यह सबसे आसान और तेज़ तरीका है!

ध्यान दें कि पिछले उदाहरण में मूल्यांकन() का उपयोग किया गया था। ऐसा इसलिए है क्योंकि गिनती() फ़ंक्शन एक टेक्स्ट परिणाम लौटाता है। query() का उपयोग करने से एक DOMNodeList वापस आ जाएगी, लेकिन वह खाली होगी।

XPath उपयोग करने लायक है क्योंकि यह न केवल आपके PHP कोड को सरल बनाता है, बल्कि गति लाभ भी प्रदान करता है। मैंने देखा कि पहला संस्करण दूसरे की तुलना में औसतन 30% तेज़ था। लेकिन तीसरा पहले से 10% तेज़ है। बेशक, यह आपके सर्वर और आपके द्वारा उपयोग की जा रही क्वेरी पर निर्भर करता है। XPath को उसके शुद्ध रूप में उपयोग करने से गति और कोड लिखने में आसानी के मामले में सर्वोत्तम परिणाम मिलते हैं।

एक्सपाथ फ़ंक्शंस

यहां कुछ फ़ंक्शन दिए गए हैं जिनका उपयोग XPath के साथ किया जा सकता है। आपको बहुत सारे संसाधन भी मिलेंगे जो प्रत्येक उपलब्ध सुविधा के बारे में विस्तार से बताते हैं। यदि आपको DOMNodeList की गणना करने या नोड वैल्यू (नोड मान) की तुलना करने की आवश्यकता है, तो आप एक उपयुक्त XPath फ़ंक्शन पा सकते हैं जो अनावश्यक PHP कोड के उपयोग को समाप्त करता है।

आप इसे count() फ़ंक्शन के उदाहरण से पहले से ही जानते हैं। आइए दिए गए आईएसबीएन के साथ पुस्तकों के शीर्षक प्राप्त करने के लिए आईडी() फ़ंक्शन का उपयोग करें। ऐसा करने के लिए आपको निम्नलिखित XPath अभिव्यक्ति का उपयोग करना होगा:

आईडी("isbn1234 isbn1235")/शीर्षक

ध्यान दें कि आप जिन मानों की तलाश कर रहे हैं वे कोष्ठक में संलग्न नहीं होने चाहिए, केवल रिक्त स्थान से अलग होने चाहिए। इसके अलावा, अल्पविराम जोड़ने के बारे में भी न सोचें:

डोम दस्तावेज़); $परिणाम = $xpath->क्वेरी($क्वेरी); $किताबें = सरणी(); foreach ($नतीजा $नोड के रूप में) ($book = array('title' => $booknode->nodeValue); $books = $book; ) $books लौटाएं; )

XPath में जटिल कार्यों को संभालना अविश्वसनीय रूप से सरल है।

XPath के साथ PHP फ़ंक्शंस का उपयोग करना

कभी-कभी आपको अधिक कार्यक्षमता की आवश्यकता होगी जो मानक XPath फ़ंक्शन प्रदान नहीं कर सकते। सौभाग्य से, PHP DOM देशी PHP फ़ंक्शंस को XPath क्वेरीज़ के साथ इंटरैक्ट करने की अनुमति देता है।

आइए एक उदाहरण देखें जो पुस्तक के शीर्षक में शब्दों की संख्या लौटाता है। इस सरलतम फ़ंक्शन में, हम निम्नलिखित लिखेंगे:

डोम दस्तावेज़); $परिणाम = $xpath->क्वेरी($क्वेरी); $शीर्षक = $परिणाम->आइटम(0)->getElementsByTagName("शीर्षक") ->आइटम(0)->नोडवैल्यू; वापसी str_word_count($शीर्षक); )

लेकिन, हम str_word_count() फ़ंक्शन को सीधे XPath अनुरोध में भी शामिल कर सकते हैं। यह कुछ चरणों में किया जा सकता है. सबसे पहले, हमें XPath ऑब्जेक्ट के साथ नेमस्पेस पंजीकृत करना होगा। XPath अनुरोधों में PHP फ़ंक्शंस को स्ट्रिंग "php: functionString" का उपयोग करके कॉल किया जाता है, जिसके बाद वांछित फ़ंक्शन का नाम लिखा जाता है। साथ ही, नेमस्पेस पर http://php.net/xpath पर अधिक विस्तार से चर्चा की गई है। अन्य नामस्थान मान एक त्रुटि उत्पन्न करेंगे। इसके बाद हमें रजिस्टरPHPFunctions() को कॉल करना होगा। यह फ़ंक्शन PHP को बताता है कि जब नेमस्पेस "php:" के माध्यम से कॉल किया जाता है, तो PHP इस कॉल को संभाल लेगा।

कॉलिंग फ़ंक्शंस के लिए एक उदाहरण सिंटैक्स होगा:

php: functionString ("nameoffunction", arg, arg...)

आइए इसे निम्नलिखित getNumberOfWords() फ़ंक्शन उदाहरण में एक साथ रखें:

डोम दस्तावेज़); //रजिस्टर php नेमस्पेस $xpath->registerNamespace('php', 'http://php.net/xpath'); //अब php फ़ंक्शंस को xpath अनुरोधों में कॉल किया जा सकता है $xpath->registerPHPFunctions(); $query = "php:functionString("str_word_count",(//library/book[@isbn = "$isbn"]/title))"; वापसी $xpath->मूल्यांकन($query); )

ध्यान दें कि नोड का टेक्स्ट प्राप्त करने के लिए आपको XPath फ़ंक्शन text() को कॉल करने की आवश्यकता नहीं है। रजिस्टरPHPFunctions() विधि इसे स्वचालित बनाती है। हालाँकि, कोड की निम्नलिखित उदाहरण पंक्ति भी मान्य होगी:

php: functionString("str_word_count",(//library/book[@isbn = "$isbn"]/title))

PHP फ़ंक्शंस को पंजीकृत करना केवल उन फ़ंक्शंस तक सीमित नहीं है जो PHP में शामिल हैं। आप अपने स्वयं के फ़ंक्शंस को परिभाषित कर सकते हैं और उन्हें XPath के अंदर उपयोग कर सकते हैं। अंतर केवल इतना है कि आपको "php:functionString" के बजाय "php:function" का उपयोग करना होगा।

आइए बुनियादी कार्यक्षमता प्रदर्शित करने के लिए कक्षा के बाहर एक फ़ंक्शन लिखें। हम जिस फ़ंक्शन का उपयोग करेंगे वह लेखक "जॉर्ज ऑरवेल" की पुस्तकें लौटाता है। इसे उस प्रत्येक नोड के लिए सत्य लौटना चाहिए जिसे आप क्वेरी में शामिल करना चाहते हैं।

नोडवैल्यू == "जॉर्ज ऑरवेल"; } !}

फ़ंक्शन को दिया गया तर्क DOM तत्वों की एक सरणी है। यह फ़ंक्शन सरणी के माध्यम से जाता है और आवश्यक तत्वों को निर्धारित करता है, और फिर उन्हें DOMNodeList में शामिल करता है। इस उदाहरण में, परीक्षण किया जा रहा नोड /पुस्तक था, और हमने आवश्यक तत्वों को निर्धारित करने के लिए /लेखक का भी उपयोग किया।

अब हम getGeorgeOrwellBooks() फ़ंक्शन बना सकते हैं:

डोम दस्तावेज़); $xpath->registerNamespace('php', 'http://php.net/xpath'); $xpath->registerPHPFunctions(); $query = "//लाइब्रेरी/पुस्तक1"; $परिणाम = $xpath->क्वेरी($क्वेरी); $किताबें = सरणी(); foreach($परिणाम $नोड के रूप में) ($books = $node->getElementsByTagName("title") ->आइटम(0)->nodeValue; ) $books वापस करें; )

यदि तुलना() फ़ंक्शन स्थिर है, तो आपको XPath क्वेरी में संशोधन करने की आवश्यकता है:

//पुस्तकालय किताब

ईमानदारी से कहें तो, यह सारी कार्यक्षमता शुद्ध XPath कोड का उपयोग करके कार्यान्वित की जा सकती थी। लेकिन उदाहरण दिखाता है कि आप XPath क्वेरीज़ का विस्तार कैसे कर सकते हैं और उन्हें अधिक जटिल बना सकते हैं।

निष्कर्ष के तौर पर

एक्सपाथ XML के साथ काम करते समय कोड की मात्रा कम करने और इसकी प्रोसेसिंग बढ़ाने का एक शानदार तरीका है। अतिरिक्त PHP DOM कार्यक्षमता आपको XPath फ़ंक्शंस का विस्तार करने की अनुमति देती है। यह वास्तव में उपयोगी चीज़ है, यदि आप इसका उपयोग करते हैं और बारीकियों में उतरते हैं, तो आपको कम से कम कोड लिखना होगा।


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

उदाहरण XML दस्तावेज़

हम इस XML दस्तावेज़ का उपयोग नीचे दिए गए उदाहरणों में करेंगे।


हैरी पॉटर
29.99


एक्सएमएल सीखना
39.95

नोड का चयन करें

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

नीचे दी गई तालिका में हम कुछ अभिव्यक्ति पथ और अभिव्यक्ति के परिणाम दिखाते हैं:

अभिव्यक्ति पथपरिणाम
किताब की दुकानपुस्तक तत्व के सभी चाइल्ड नोड्स का चयन करें।
/ किताब की दुकान

मूल तत्व बुकस्टोर का चयन करें.

नोट: यदि कोई पथ स्लैश (/) से शुरू होता है, तो पथ हमेशा तत्व के पूर्ण पथ का प्रतिनिधि होता है!

किताबों की दुकान/किताबबुकस्टोर की सभी बुकआइटम से संबंधित उप-आइटम का चयन करें।
// किताबदस्तावेज़ में उनकी स्थिति की परवाह किए बिना, सभी पुस्तक उपतत्वों का चयन करें।
किताबों की दुकान // किताबउन सभी पुस्तक तत्वों का चयन करता है जो तत्व के बुकस्टोर के वंशज नहीं हैं, भले ही बुकस्टोर में और उसके नीचे उनकी स्थिति कुछ भी हो।
// @लैंगलैंग नाम की सभी संपत्तियों का चयन करें।

विधेय

एक विधेय का उपयोग एक विशिष्ट नोड या नोड को खोजने के लिए किया जाता है जिसमें निर्दिष्ट मान होता है।

विधेय वर्गाकार कोष्ठकों में संलग्न है।

नीचे दी गई तालिका में, हमने विधेय और अभिव्यक्ति के परिणाम के साथ कुछ पथ अभिव्यक्तियाँ सूचीबद्ध की हैं:

अभिव्यक्ति पथपरिणाम
/ किताबों की दुकान / किताबउन उपतत्वों का चयन करें जो पहले कार्यपुस्तिका तत्व से संबंधित हैं।
/किताबों की दुकान/पुस्तक [अंतिम()]उन उप-तत्वों का चयन करें जो पुस्तक के अंतिम पुस्तक तत्व से संबंधित हैं।
/ किताबों की दुकान / किताब [अंतिम () - 1]दूसरे पुस्तक आइटम के आपसी बुकस्टोर से संबंधित उप-आइटम का चयन करें।
/किताबों की दुकान/पुस्तक [स्थिति()<3] उपतत्वों से संबंधित पुस्तक तत्व के पहले दो पुस्तक तत्वों का चयन करें।
// शीर्षक [@lang]लैंग नामक सभी विशेषता का चयन करें जिसमें एक तत्व शीर्षक है।
// शीर्षक [@ LANG = "इंग्लैंड"]सभी तत्व नामों का चयन करें और इन तत्वों में अंग्रेजी विशेषता मान है।
/किताबों की दुकान/किताबपुस्तक तत्व के सभी पुस्तक तत्वों और मूल्य तत्व का मूल्य चुनें, जो 35.00 से अधिक होना चाहिए।
/किताबों की दुकान/पुस्तक/शीर्षकपुस्तक तत्व के सभी पुस्तक तत्व हेडर तत्वों का चयन करें और जिसमें मूल्य तत्व का मूल्य 35.00 से अधिक होना चाहिए।

अज्ञात नोड्स का चयन करें

XPath वाइल्डकार्ड का उपयोग अज्ञात XML तत्वों का चयन करने के लिए किया जा सकता है।

नीचे दी गई तालिका में, हमने कुछ पथ अभिव्यक्तियों के साथ-साथ इन अभिव्यक्तियों के परिणामों को सूचीबद्ध किया है:

एकाधिक पथ चुनें

पथ अभिव्यक्ति "|" का उपयोग करना ऑपरेटर, आप कई पथ चुन सकते हैं.

नीचे दी गई तालिका में, हमने कुछ पथ अभिव्यक्तियों के साथ-साथ इन अभिव्यक्तियों के परिणामों को भी सूचीबद्ध किया है।