"फू" वाली विशेषताओं को चुनने के लिए सही XPath क्या है?


176

इस XML को देखते हुए, XPath उन सभी तत्वों को लौटाता है जिनकी propविशेषता में Foo(पहले तीन नोड्स) शामिल हैं:

<bla>
 <a prop="Foo1"/>
 <a prop="Foo2"/>
 <a prop="3Foo"/>
 <a prop="Bar"/>
</bla>

1
हर कोई "प्रोप" विशेषता को क्यों देख रहा है? क्या मैं कुछ भुल गया? यह सिर्फ कहता है कि पहले तीन नोड्स प्राप्त करें।

6
हर कोई प्रोप विशेषता को देख रहा है क्योंकि यही पूछा गया था। सभी नोड प्राप्त करें जहां प्रोप में "फू" शामिल है। <a prop="Foo5" /> जोड़ें और आप देखेंगे कि यह सिर्फ "पहले तीन नोड्स" क्यों नहीं है ..
erlando

शीर्षक की परवाह किए बिना, शरीर में प्रश्न खराब शब्द है। क्या फू वास्तव में किसी भी प्रोप विशेषता में हो सकता है, या क्या आप गंभीरता से सिर्फ पहले तीन नोड्स चाहते हैं?

3
हां, कृपया शीर्षक को देखें (और संपादित करने के लिए स्वतंत्र महसूस करें)।
ripper234

जवाबों:


307
//a[contains(@prop,'Foo')]

काम करता है अगर मैं परिणाम प्राप्त करने के लिए इस XML का उपयोग करता हूं।

<bla>
 <a prop="Foo1">a</a>
 <a prop="Foo2">b</a>
 <a prop="3Foo">c</a>
 <a prop="Bar">a</a>
</bla>

संपादित करें: ध्यान देने वाली एक और बात यह है कि जबकि ऊपर वाला XPath उस विशेष xml के लिए सही उत्तर देगा, यदि आप गारंटी देना चाहते हैं कि आपको "तत्वों में" तत्व "bla" मिल सकता है, तो आपको दूसरों का भी उल्लेख करना चाहिए।

/bla/a[contains(@prop,'Foo')]

यह आपके "xah" तत्व में निहित होने की परवाह किए बिना, आपके संपूर्ण xml दस्तावेज़ में "सभी" तत्वों को खोजेगा

//a[contains(@prop,'Foo')]  

मैंने इसे संपूर्णता के लिए और स्टैकओवरफ़्लो की भावना में जोड़ा। :)


3
xmlme.comअब कुछ अन्य होस्ट पर रीडायरेक्ट करता है और उपकरण या इसके जैसे कुछ भी होस्ट करने के लिए प्रकट नहीं होता है।
jpmc26

26

यह XPath आपको नोड नोड या विशेषता नाम की परवाह किए बिना 'फू' वाले सभी नोड्स देगा:

//attribute::*[contains(., 'Foo')]/..

बेशक, यदि आप विशेषता की सामग्री में खुद को अधिक रुचि रखते हैं, और जरूरी नहीं कि उनके मूल नोड, बस ड्रॉप / ।।

//attribute::*[contains(., 'Foo')]

2
सभी नोड्स के लिए//@*[contains(., 'Foo')]
अलोपी

16
descendant-or-self::*[contains(@prop,'Foo')]

या:

/bla/a[contains(@prop,'Foo')]

या:

/bla/a[position() <= 3]

विच्छेदित:

descendant-or-self::

अक्ष - नीचे और नीचे प्रत्येक नोड के माध्यम से खोज। इसे अक्सर // से बेहतर कहा जाता है। मुझे कुछ क्रियान्वयनों का सामना करना पड़ा है, जहां // का मतलब कहीं भी (मूल या जड़ नोड का स्वयं का)। अन्य डिफ़ॉल्ट अक्ष का उपयोग करते हैं।

* or /bla/a

टैग - एक वाइल्डकार्ड मैच, और / bla / a एक पूर्ण पथ है।

[contains(@prop,'Foo')] or [position() <= 3]

के भीतर की हालत []। विशेषता के लिए @prop आशुलिपि है :: सहारा, क्योंकि विशेषता एक और खोज अक्ष है। वैकल्पिक रूप से आप स्थिति () फ़ंक्शन का उपयोग करके पहले 3 का चयन कर सकते हैं।



4

क्या आपने कुछ इस तरह की कोशिश की है:

// [a (@prop, "Foo")]

मैंने पहले कभी भी फ़ंक्शन का उपयोग नहीं किया है, लेकिन संदेह है कि इसे विज्ञापन के रूप में काम करना चाहिए ...


@toddk ... आपने एक गैर-मौजूद विशेषता को लक्षित किया है: @foo। आप @prop ;-)
मेट्रो स्मर्फ

4

यदि आपको स्वयं लिंक की सामग्री से मेल खाना है, तो पाठ का उपयोग करें ():

//a[contains(@href,"/some_link")][text()="Click here"]



1

उपरोक्त कोड के लिए ... // * [(@ प्रोप, 'फू')]


यह फू में किसी भी तत्व के लिए है, लेकिन गुण "प्रोप" होना चाहिए
Digiguru

1

इसे इस्तेमाल करे:

// एक [शामिल (@ प्रोप, 'foo')]

दस्तावेज़ में किसी भी "ए" टैग के लिए काम करना चाहिए

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.