2009-05-27 9 views
75

मेरे पास अच्छी तरह से गठित XHTML पृष्ठ है। जब मेरे पास लिंक किया गया टेक्स्ट है तो मैं एक लिंक का गंतव्य यूआरएल खोजना चाहता हूं।मैं XPath के साथ लिंक टेक्स्ट द्वारा लिंक यूआरएल कैसे पा सकता हूं?

उदाहरण

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

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

उत्तर

123

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

 
//a[text()='text_i_want_to_find']/@href 
+60

क्या मैं कभी xpath सीखूंगा? जब मैं एक प्रश्न देखें कि यह तो स्पष्ट और समझने में आसान है ... लेकिन आप पढ़ सकते हैं इस स्टैनफोर्ड डेटाबेस कोर्स करने के लिए स्वतंत्र परिचय एक्सएमएल और XPath पर एक अच्छा अनुभाग है, तो मैं अपने ही – flybywire

+3

@flybywire पर एक लिखने में सक्षम कभी नहीं हूँ। पाठ(), तो आप उपयोग कर सकते हैं के बजाय –

+2

"। =", उदाहरण के लिए //a[.='Register यहाँ '] – danpop

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

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

6

Think।

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

+0

हाय पीटर आप xpath क्वेरी जानने के लिए किसी भी ट्यूटोरियल साइट है? –

62

आप के लिए बहुत देर हो गई, लेकिन एक ही सवाल के साथ किसी और के लिए ...

//a[contains(text(), 'programming')]/@href 
बेशक

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

+1

यह एक और अधिक सामान्यीकृत है। अच्छा शेयर –

1

अगर आप एचटीएमएल चपलता पैक उपयोग getattributeValue उपयोग कर रहे हैं:

$doc2.DocumentNode.SelectNodes("//div[@class='className']/div[@class='InternalClass']/a[@class='InternalClass']").GetAttributeValue("href","") 
3

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

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

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

+0

कृपया उत्तर के रूप में "धन्यवाद" को न जोड़ें। साइट में कुछ समय निवेश और आपके पास पर्याप्त [विशेषाधिकार] लाभ होगा (http://stackoverflow.com/privileges) आप की तरह जवाब है, जो धन्यवाद कहने का स्टैक ओवरफ़्लो तरीका है वोट दें करने के लिए। – Sklivvz

+5

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

संबंधित मुद्दे