2012-07-10 11 views
5

का उपयोग करके विशेषता डेटा-यूआरएल के साथ तत्वों का चयन करें, मैं थोड़ा डाउनलोड-रोबोटर लिख रहा हूं, जो स्वयं के लिए निचली परतों में लिंक खोज रहा है।HTMLAgilityPack

क्या मैं खोजने की जरूरत है एक HTML पृष्ठ में सभी लिंक (लिंक करने के लिए .jpg के साथ ही लिंक .pgn फ़ाइलों, .pdf, .html, .... - फ़ाइलें) हैं

मैं सभी ए-href लिंक खोजने के लिए एचटीएमएल-एजिलिटीपैक का उपयोग कर रहा हूं।

नमूना कोड:

foreach (HtmlNode link in htmlDocument.DocumentNode.SelectNodes("//a[@href]")) 
{ 
    HtmlAttribute attribute = link.Attributes["href"]; 
    links.Add(attribute.Value); 
} 

लेकिन मैं डेटा यूआरएल को खोजने के लिए और साथ ही चाहते हैं।

डेटा-यूआरएल खोजने के लिए मुझे XPath-syntax का उपयोग करना होगा। एक htmlcode में एक उदाहरण डेटा यूआरएल:

<div class="cbreplay" data-url="2012\edmonton\partien.pgn"></div> 

मैं की जरूरत है "2012 \ एडमंटन \ partien.pgn" इस उदाहरण से बाहर। मैं XPath वाक्यविन्यास के साथ इसका एहसास कैसे कर सकता हूं?

सर्वश्रेष्ठ अभिवादन, अगर मैंने कुछ बुरी गलतियां की हैं, तो मुझे बताएं। यह मेरा पहला सवाल है।

उत्तर

11

निम्नलिखित आप क्या चाहते हैं करना चाहिए:

foreach (HtmlNode divNode in htmlDocument.DocumentNode.SelectNodes("//div[@data-url]")) 
{ 
    HtmlAttribute attribute = divNode.Attributes["data-url"]; 
    links.Add(attribute.Value); 
} 

प्रभावी ढंग से, बयान //div[@data-url] एक डेटा-यूआरएल विशेषता के साथ सभी नोड्स का चयन करना चाहिए। फिर हम इस विशेषता को खींचते हैं।

यदि इस विशेषता के साथ divs के अलावा नोड्स हैं, तो //*[@data-url] चाल चलाना चाहिए।

+0

बहुत बहुत धन्यवाद, यह पूरी तरह से काम कर रहा है। –

+2

'div' -' "// * [@ data-url]" के बजाय '*' का उपयोग करने के लिए यह अधिक लचीला हो सकता है। उन डर्न एचटीएमएल लेखकों ने अपना एचटीएमएल बदलना जारी रखा है! – user3791372

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