XPATH

2011-01-27 18 views
11

साथ स्तर की परवाह किए बिना एक XML तत्व का चयन मैं इस है:XPATH

<a> 
    <b> 
    <t>text</t> 
    </b> 
</a> 
<a> 
    <t>text</t> 
</a> 

तो मैं कहाँ है की परवाह किए बिना पाठ का चयन करना चाहते हैं। (ध्यान दें कि यह कहीं भी 1/2 स्तर नीचे नहीं हो सकता है, इसके लिए इसमें कोई माता-पिता नहीं हो सकते हैं)

क्या यह संभव है?

उत्तर

21

आप the descendant axis लिए देख रहे हैं:

descendant अक्ष संदर्भ नोड के वंशज होता है; वंशज एक बच्चा है या बच्चे का बच्चा है और इसी तरह; /descendant:t

बेशक

, के रूप में दूसरों का जवाब दे दिया, there is an abbreviated syntax for this:

///descendant-or-self::node()/ के लिए कम है इस प्रकार वंशज अक्ष विशेषता या नाम स्थान नोड्स

आपके मामले में कभी नहीं होता है। उदाहरण के लिए, //para के लिए /descendant-or-self::node()/child::para और इतने कम है दस्तावेज़ (यहां तक ​​कि एक para तत्व है कि एक दस्तावेज़ तत्व जा दस्तावेज़ तत्व नोड के बाद से //para द्वारा चयनित जाएगा में किसी भी para तत्व का चयन करेंगे का एक बच्चा है रूट नोड)

19

चाहते हैं तो आप वर्तमान नोड से सभी नोड्स का चयन करने के // उपयोग कर सकते हैं। तो //text() सभी टेक्स्ट नोड्स का चयन करेगा।

यदि आप सभी टी तत्व चाहते थे तो आप //t करेंगे। यदि आप एक निश्चित बिंदु से सभी t तत्व करना चाहते हैं तो आप /x/y//t कर सकते हैं।

2

डब्ल्यू 3 स्कूल्स में HTML से संबंधित सभी चीज़ों के बारे में वास्तव में अच्छे निःशुल्क पाठ्यक्रम हैं। मैं इसे पढ़ने और उदाहरण बनाने की अत्यधिक अनुशंसा करता हूं। http://www.w3schools.com/xsl/xpath_syntax.asp

संकेत: यदि आप भाव evalute लिए अपने ब्राउज़र की कंसोल का उपयोग कर सकते हैं। यह डेवलपर टूल के अंतर्गत है - Chorme और Firefox के लिए F12 कुंजी:

$x('<your expressions>'); 

तो, के रूप में हर किसी ने कहा, आप // सिंटैक्स का उपयोग कर सकते हैं पेज में कहीं भी एक तत्व को खोजने के लिए। उदा। //a आपको पृष्ठ के भीतर सभीa तत्व वापस कर देगा।

अधिकतर आप एक विशिष्ट व्यक्ति चाहते हैं, इसलिए, जहां आप भविष्यवाणियों का उपयोग करते हैं। वे ब्रैकेट के बीच निहित हैं। उदाहरण के रूप में यह बहुत ही पृष्ठ का उपयोग करना, यहाँ एक XQuery है:

//a[text()="Simeon"] 

यह xpath सभी a तत्वों शिमोन है के रूप में यह पाठ है वापस आ जाएगी। कई परिस्थितियों में आपको अधिक पहचानकर्ता शामिल करने के लिए xpath में सुधार करने की आवश्यकता हो सकती है, और अधिक विशिष्ट हो।

//a[text()="Simeon" AND @href="https://stackoverflow.com/users/274344/simeon"] 

तो, आप काफी किसी भी HTML विशेषता, या यहाँ तक कि सीएसएस का उपयोग एक विशेष नोड आप चाहते हैं पहचान कर सकते हैं।

लेकिन अब, इसे एक पायदान ले लें। मान लें कि आप a तत्व प्राप्त करना चाहते हैं जो उपयोगकर्ता के mkimdसे उत्तर 27 जनवरी से नीचे है। यदि आप इस पृष्ठ की संरचना को देखते हैं, तो आपको a प्राप्त करना होगा और कुछ स्तरों को वापस लेना होगा, जब तक कि आप अवधि तक पहुंचने में सक्षम न हों, जो पोस्टिंग तिथि रखता है।

//a[text()="mkimd" AND ../../div[@class="user-action-time"]/span[contains(.,"Jan")]] 

इन प्रश्नों को करने के कई तरीके हैं, मैंने दिया यह आखिरी उदाहरण विभिन्न xqueries के साथ प्राप्त किया जा सकता है।

मुझे लगता है कि xqueries कंसोल में निर्देशिकाओं में नेविगेशन के समान हैं, जैसे कि लिनक्स बाश - रिश्तेदार और पूर्ण पथ, और पहचानकर्ता SQL WHERE खंड हैं।

आप शोध करते हैं, तो इस तरह के

  • लोअर केस()
  • अपर-केस()
  • concat()
  • समाप्त होता है-के साथ के रूप में XPATH वाक्य रचना में उपलब्ध कई काम करता है, कर रहे हैं()
  • ऑपरेटरों (+, -, *, div, !=, <, <=, 0,123,, ...)

मैं अत्यधिक तुम जैसे फ़ायरफ़ॉक्स Firefug FirePath ऐड-ऑन कुछ उपकरण का उपयोग करने XQuery अभ्यास और देखें कि क्या आप अपने इच्छित अवयव हो रही है की सलाह - यह तत्व पाया पर प्रकाश डाला गया।

====================

संपादित करें - मई-8-15

आप सेलेनियम स्वचालन में Xpath उपयोग कर रहे हैं मामले में, जानते हैं यह आपको सीएसएस छद्म तत्वों का चयन करने में मदद नहीं करेगा।