2011-01-29 14 views
7

मैं एचटीएमएल चपलता पैक का उपयोग एचटीएमएल पेज से छवि और href लिंक को पार्स करने के लिए करना चाहता हूं, लेकिन मुझे एक्सएमएल या एक्सपीएथ के बारे में बहुत कुछ पता नहीं है। हालांकि कई वेबसाइटों में मदद दस्तावेज़ देख रहे हैं, मैं बस नहीं कर सकता समस्या को हल करें। इसके अलावा, मैं VisualStudio 2005 में सी # का उपयोग करता हूं। और मैं बस अंग्रेजी को स्पष्ट रूप से नहीं बोल सकता, इसलिए, मैं कुछ ईमानदार धन्यवाद दूंगा कि कोई उपयोगी कोड लिख सकता है।एचटीएमएल एजिलिटी पैक का उपयोग कर img/src या a/hrefs कैसे प्राप्त करें?

+0

और, एचटीएमएल एजिलिटी पैक सापेक्ष पथ हल कर सकता है? – iShow

उत्तर

21

first example मुख पृष्ठ पर बहुत कुछ इसी तरह करता है, लेकिन पर विचार करें:

HtmlDocument doc = new HtmlDocument(); 
doc.Load("file.htm"); // would need doc.LoadHtml(htmlSource) if it is not a file 
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"]) 
{ 
    string href = link["href"].Value; 
    // store href somewhere 
} 

तो आप कल्पना कर सकते है कि img src @ के लिए, बस img के साथ प्रत्येक a, और hrefsrc के साथ बदलें।

foreach(HtmlNode node in doc.DocumentElement 
       .SelectNodes("//a/@href | //img/@src") 
{ 
    list.Add(node.Value); 
} 

रिश्तेदार यूआरएल से निपटने के लिए, Uri वर्ग को देखो: तुम भी करने के लिए आसान बनाने के लिए सक्षम हो सकता है।

+0

बहुत बहुत धन्यवाद! और यह मेरा पहला पूछताछ अनुभव है – iShow

+0

+1 @Marc ... उत्कृष्ट ... यह वही है जो मैं ढूंढ रहा हूं ... –

+3

मुझे त्रुटि मिलती है: दस्तावेज़ के लिए HtmlDocument ऑब्जेक्ट में दस्तावेज़ नहीं है। 0.0 संस्करण HtmlAgilitypack foreach (doc.DocumentNode.SelectNodes में HtmlNode लिंक ("// a [@href]") { HtmlAttribute att = link.Attributes ["href"]; – Kiquenet

6

उदाहरण और स्वीकृत उत्तर गलत है। यह नवीनतम संस्करण के साथ संकलित नहीं है। मैं कुछ और कोशिश करता हूं:

private List<string> ParseLinks(string html) 
    { 
     var doc = new HtmlDocument(); 
     doc.LoadHtml(html); 
     var nodes = doc.DocumentNode.SelectNodes("//a[@href]"); 
     return nodes == null ? new List<string>() : nodes.ToList().ConvertAll(
       r => r.Attributes.ToList().ConvertAll(
       i => i.Value)).SelectMany(j => j).ToList(); 
    } 

यह मेरे लिए काम करता है।

1

शायद मुझे उत्तर पोस्ट करने में बहुत देर हो चुकी है। निम्नलिखित मेरे लिए काम किया:

var MainImageString = MainImageNode.Attributes.Where(i=> i.Name=="src").FirstOrDefault(); 
संबंधित मुद्दे