मैं XPath के साथ लिंक पाठ द्वारा लिंक URL कैसे खोज सकता हूं?


88

मेरे पास एक अच्छी तरह से गठित एक्सएचटीएमएल पेज है। जब मेरे पास लिंक है, तो मैं लिंक का गंतव्य URL खोजना चाहता हूं।

उदाहरण

<a href="http://stackoverflow.com">programming questions site</a>
<a href="http://cnn.com">news</a>

मैं एक XPath अभिव्यक्ति चाहता हूँ जैसे कि अगर programming questions siteयह दिया जाएगा http://stackoverflow.comऔर अगर मैं इसे दूंगा तो newsवह देगा http://cnn.com

जवाबों:


141

कुछ इसी तरह होना चाहिए:

// एक [पाठ () = 'text_i_want_to_find'] / @ href

73
क्या मैं कभी xpath सीखूंगा? जब मैं एक प्रश्न देखता हूं तो यह स्पष्ट और समझने में आसान होता है ... लेकिन मैं कभी भी अपने दम पर एक लिखने में सक्षम नहीं हूं
फ्लाईबाइवर

4
@flybywire यदि आप इस स्टैनफोर्ड के मुफ्त परिचय को डेटाबेस कोर्स में पढ़ते हैं, तो XML और XPath पर एक अच्छा खंड है।
जेम्स पी।

4
पाठ () के बजाय, आप "। =" का उपयोग कर सकते हैं, उदाहरण के लिए //a J...'egegister '']
danpop

1
यदि मुझे पाठ नहीं पता है तो क्या होगा? क्या मैं उन नोड्स का चयन कर सकता हूं जिनमें कोई httpकीवर्ड शामिल है या कुछ विशेष?
एलस्टन

77

आपके लिए बहुत देर हो चुकी है, लेकिन उसी प्रश्न के साथ किसी और के लिए ...

//a[contains(text(), 'programming')]/@href

बेशक, 'प्रोग्रामिंग' किसी भी पाठ का टुकड़ा हो सकता है।


1
यह एक अधिक सामान्यीकृत है। अच्छा हिस्सा
हारून जिल

यह मामला संवेदनशील है। क्या मैं यहां मामले की अनदेखी कर सकता हूं?
user3060430

9
//a[text()='programming quesions site']/@href 

जो मूल रूप से एक एंकर नोड की पहचान करता है जिसमें <a>आपके इच्छित पाठ है, और hrefविशेषता को निकालता है ।


6

SQL में WHERE क्लॉज के रूप में वर्गाकार कोष्ठकों में वाक्यांश के बारे में सोचें।

तो यह क्वेरी कहती है, "एक" टैग का "href" विशेषता (@) का चयन करें जो "टैग" कहीं भी दिखाई देता है (//), लेकिन केवल जहां (ब्रैकेट में दिया गया वाक्यांश) "a" टैग के समान पाठ सामग्री है ' प्रोग्रामिंग प्रश्न साइट ''।


हाय पीटर, क्या आपके पास xpath क्वेरी सीखने के लिए कोई ट्यूटोरियल साइट है?
करीम नरसिंदानी

4

असंवेदनशील मामले के लिए, निम्नलिखित का उपयोग करें:

//a[contains(translate(text(),'PROGRAMMING','programming'), 'programming')]/@href

अनुवाद, बड़े अक्षरों को कम प्रोग्रामिंग में परिवर्तित करता है।


कृपया उत्तर के रूप में "धन्यवाद" न जोड़ें। साइट में कुछ समय निवेश करें और आप अपने पसंद के उत्तरों को उभारने के लिए पर्याप्त विशेषाधिकार प्राप्त करेंगे , जो आपको धन्यवाद कहने का स्टैक ओवरफ्लो तरीका है।
स्कालिव्ज़

5
"धन्यवाद" मेरा "उत्तर" नहीं था। मैं एक तरह से ऊपर दिए गए जवाब का श्रेय देता था, जिस पर मैंने सुधार किया।
अब्दो जूल

1

अगर आप html चपलता पैक का उपयोग कर रहे हैं

$doc2.DocumentNode.SelectNodes("//div[@class='className']/div[@class='InternalClass']/a[@class='InternalClass']").GetAttributeValue("href","")
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.