इस तरह देखते हुए मार्कअप:क्या XPath क्वेरी परिणाम के पैरेंट नोड प्राप्त करने का कोई बेहतर तरीका है?
<div class="foo">
<div><span class="a1"></span><a href="...">...</a></div>
<div><span class="a2"></span><a href="...">...</a></div>
<div><span class="a1"></span>some text</div>
<div><span class="a3"></span>some text</div>
</div>
अब मैं इन <a>
और some text
प्राप्त करने में दिलचस्पी केवल यदि आसन्न span
वर्ग a1
की है। तो पूरे कोड के अंत में मेरा परिणाम <a>
पहले div
और some text
से तीसरे स्थान पर है। यह आसान होगा अगर <a>
और some text
span
या div
के अंदर class
विशेषता होगी, लेकिन कोई भाग्य नहीं होगा।
//div[contains(@class,'foo')]/div/span[contains(@class,'a1')]
और उसके बाद अपनी मूल हो और संदर्भ नोड के रूप में है कि माता-पिता नोड के साथ एक और query()
कार्य करें:
क्या मैं अब कर रहा हूँ span
a1
इस तरह वर्ग के साथ के लिए क्वेरी है। यह बहुत कुशल होने की तरह दिखता है तो क्या ऐसा करने का कोई बेहतर तरीका है?
उत्तर
प्रति @MarcB answer के रूप में, सही क्वेरी है:
//div[contains(@class,'foo')]/div/span[contains(@class,'a1')]/..
लेकिन <A>
के लिए उपयोग करने के लिए बेहतर हो सकता है:
//div[contains(@class,'foo')]/div/span[contains(@class,'a1')]/../a
<A>
में प्राप्त करें इसके कंटेनर की स्थिरता।
प्रणाली रास्तों दायर करने के लिए संदर्भ के लिए +1, कि मैं कैसे नहीं हुआ है हमेशा इसके बारे में सोचा लेकिन मैंने इसे कभी भी –
के रूप में समझाया नहीं है मैंने सवाल पूछने से पहले मैन्युअल की जांच की लेकिन ऐसा लगता है कि मैं ".." याद करने में कामयाब रहा क्योंकि यह स्पष्ट रूप से वहां है। लेकिन एफएस संदर्भ ने इसे तुरंत स्पष्ट कर दिया। धन्यवाद। –
हाँ। जब मैं पहली बार xpath में कूद गया, तो मैं थोड़ी देर के लिए इस तरह घूमता था, लेकिन क्वेरी <-> पथ संघ बनाना मेरे लिए काफी यूरेका क्षण था। –