जवाबों:
उपयोग:
(/bookstore/book[@location='US'])[1]
यह सबसे पहले पुस्तक तत्वों को 'यूएस' के बराबर स्थान विशेषता के साथ मिलेगा। फिर यह उस सेट से पहले नोड का चयन करेगा। कोष्ठकों के उपयोग पर ध्यान दें, जो कुछ कार्यान्वयनों के लिए आवश्यक हैं।
ध्यान दें, यह /bookstore/book[1][@location='US']
तब तक नहीं है जब तक कि पहला तत्व भी उस स्थान की विशेषता न हो जाए।
/bookstore/book[@location='US'][1]
'यूएस' की सभी पुस्तकों को वापस नहीं करता है। मैंने इसे म्यूटेंट बार और विभिन्न भाषाओं में 'xpath कार्यान्वयन' के तहत परीक्षण किया है। /bookstore/book[@location='US'][1]
एक किताब की दुकान के तहत पहली 'यूएस' पुस्तक लौटाता है। यदि म्यूटेंट बुकस्टोर हैं, तो यह प्रत्येक से पहला लौटाएगा। यह वही है जो ओपी ने पूछा (बुकस्टोर के तहत पहला नोड)। आपका संस्करण सभी बुकस्टोर्स (पहला मैच) से केवल एक पुस्तक लौटाता है।
/bookstore/book[@location='US'][1]
केवल सरल संरचना के साथ काम करता है।
थोड़ी और संरचना जोड़ें और चीजें टूट जाती हैं।
साथ में
<bookstore>
<category>
<book location="US">A1</book>
<book location="FIN">A2</book>
</category>
<category>
<book location="FIN">B1</book>
<book location="US">B2</book>
</category>
</bookstore>
/bookstore/category/book[@location='US'][1]
पैदावार
<book location="US">A1</book>
<book location="US">B2</book>
"पहला नोड जो अधिक जटिल स्थिति से मेल नहीं खाता है"। /bookstore/category/book[@location='US'][2]
कुछ नहीं देता।
कोष्ठक के साथ आप मूल प्रश्न के लिए परिणाम प्राप्त कर सकते हैं:
(/bookstore/category/book[@location='US'])[1]
देता है
<book location="US">A1</book>
और (/bookstore/category/book[@location='US'])[2]
उम्मीद के मुताबिक काम करता है।
/bookstore/book[1]
और नहीं (/bookstore/book)[1]
। आपके द्वारा प्रदान किया गया मामला वैसा नहीं है, जैसा कि एक ओपी ने पूछा था। संभवतः, ओपी ने मेरे उत्तर को स्वीकार कर लिया क्योंकि उसने वही किया जो उसने अपेक्षित था (और अनुरोध किया था)।
'(//div[text() = "'+ name +'"])[1]/following-sibling::*/div/text()'
:। मामले में कई नोड मैच हैं name
।
जोनाथन फिंगलैंड के जवाब के स्पष्टीकरण के रूप में:
[position()=1 and @location='US']
) में कई स्थितियाँ पूरी तरह सही होनी चाहिए[position()=1][@location='US']
) एक के बाद एक सच होनी चाहिए[position()=1][@location='US']
! = [@location='US'][position()=1]
[position()=1 and @location='US']
==[@location='US' and position()=1]
[position()=1]
संक्षिप्त किया जा सकता है[1]
आप बूलियन ऑपरेटरों " and
" और " or
", और बूलियन XPath कार्यों के साथ not()
, true()
और false()
। साथ ही आप कोष्ठकों में उप-अभिव्यक्तियों को लपेट सकते हैं।
पहले अंग्रेजी पुस्तक नोड (पूरे दस्तावेज़ में) खोजने का सबसे आसान तरीका, अधिक जटिल संरचित xml फ़ाइल को ध्यान में रखते हुए, जैसे:
<bookstore>
<category>
<book location="US">A1</book>
<book location="FIN">A2</book>
</category>
<category>
<book location="FIN">B1</book>
<book location="US">B2</book>
</category>
</bookstore>
xpath अभिव्यक्ति है:
/descendant::book[@location='US'][1]
<bookstore>
<book location="US">A1</book>
<category>
<book location="US">B1</book>
<book location="FIN">B2</book>
</category>
<section>
<book location="FIN">C1</book>
<book location="US">C2</book>
</section>
</bookstore>
तो ऊपर दिया गया है; आप के साथ पहली पुस्तक का चयन कर सकते हैं
(//book[@location='US'])[1]
और यह कहीं भी पहला स्थान प्राप्त करेगा जिसका कोई स्थान यूएस है। [ए 1]
//book[@location='US']
स्थान यूएस के साथ सभी पुस्तकों के साथ नोड सेट लौटाएगा। [ए 1, बी 1, सी 2]
(//category/book[@location='US'])[1]
दस्तावेज़ में कहीं भी एक श्रेणी में मौजूद पहली पुस्तक का स्थान US लौटाएगा। [बी 1]
(/bookstore//book[@location='US'])[1]
रूट तत्व बुकस्टोर के तहत कहीं भी मौजूद होने वाले स्थान के साथ पहली पुस्तक लौटाएगा; / किताबों की दुकान का हिस्सा वास्तव में बेमानी बना। [ए 1]
सीधे उत्तर में:
/bookstore/book[@location='US'][1]
पुस्तक के तत्व के साथ बुक एलीमेंट के लिए आपको पहला नोड लौटाएगा जो कि बुकस्टोर के अंतर्गत है [A1]
संयोग से अगर आप चाहते थे, तो इस उदाहरण में पहली ऐसी अमेरिकी पुस्तक को ढूंढना जो किताबों की दुकान का प्रत्यक्ष बच्चा न हो:
(/bookstore/*//book[@location='US'])[1]
वांछित नोड प्राप्त करने के लिए सूचकांक का उपयोग करें यदि xpath जटिल है या एक ही xpath के साथ मौजूद एक से अधिक नोड है।
Ex:
(//bookstore[@location = 'US'])[index]
आप जो चाहें वो नंबर दे सकते हैं।
पूर्व के लिए।
<input b="demo">
तथा
(input[@b='demo'])[1]
एक ऑनलाइन xpath परीक्षक की मदद से मैं यह उत्तर लिख रहा हूँ ...
इसके लिए:
<table id="t2"><tbody>
<tr><td>123</td><td>other</td></tr>
<tr><td>foo</td><td>columns</td></tr>
<tr><td>bar</td><td>are</td></tr>
<tr><td>xyz</td><td>ignored</td></tr>
</tbody></table>
निम्नलिखित xpath:
id("t2") / tbody / tr / td[1]
आउटपुट:
123
foo
bar
xyz
चूँकि 1 का अर्थ है उन सभी td तत्वों का चयन करना जो अपने स्वयं के प्रत्यक्ष माता-पिता की पहली संतान हैं।
लेकिन निम्नलिखित xpath:
(id("t2") / tbody / tr / td)[1]
आउटपुट:
123