2012-11-17 18 views
5

में लिखना मैं सी # के लिए नया हूं और मुझे वास्तव में निम्नलिखित समस्या के साथ मदद की ज़रूरत है। मैं उन वेबपृष्ठों से फोटो यूआरएल निकालना चाहता हूं जिनके पास एक विशिष्ट पैटर्न है। उदाहरण के लिए, मैं उन सभी छवियों को निकालना चाहता हूं जिनमें निम्न पैटर्न name_412s.jpg है। मैं HTML से छवियों को निकालने के लिए निम्न कोड का उपयोग करता हूं, लेकिन मुझे यह नहीं पता कि इसे कैसे अनुकूलित किया जाए।एचटीएमएल चपलता पैक का उपयोग करके एचटीएमएल से एचटीएमएल से छवियों को निकालने और उन्हें एक एक्सएमएल फ़ाइल

public void Images() 
    { 
     WebClient x = new WebClient(); 
     string source = x.DownloadString(@"http://www.google.com"); 

     HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument(); 
     document.Load(source); 

     foreach(HtmlNode link in document.DocumentElement.SelectNodes("//img") 
     { 
      images[] = link["src"]; 
     } 
} 

मुझे परिणामों को एक XML फ़ाइल में लिखने की भी आवश्यकता है। क्या आप इसके साथ मेरी मदद भी कर सकते हैं?

धन्यवाद!

उत्तर

3

क्वेरी परिणामों को सीमित करने के लिए, आपको अपने XPath में एक शर्त जोड़ने की आवश्यकता है। उदाहरण के लिए, //img[contains(@src, 'name_412s.jpg')] परिणामों को केवल img पर सीमित करेगा जिनके पास src विशेषता है जिसमें फ़ाइल का नाम है।

जहां तक ​​एक्सएमएल के परिणाम लिखते हैं, आपको एक नया एक्सएमएल दस्तावेज बनाना होगा और उसके बाद मिलान तत्वों को कॉपी करना होगा। चूंकि आप सीधे XmlDocument में HtmlAgilityPack नोड आयात करने में सक्षम नहीं होंगे, इसलिए आपको सभी विशेषताओं को मैन्युअल रूप से कॉपी करना होगा। उदाहरण के लिए:

using System.Net; 
using System.Xml; 

// ... 

public void Images() 
{ 
    WebClient x = new WebClient(); 
    string source = x.DownloadString(@"http://www.google.com"); 
    HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument(); 
    document.Load(source); 
    XmlDocument output = new XmlDocument(); 
    XmlElement imgElements = output.CreateElement("ImgElements"); 
    output.AppendChild(imgElements); 
    foreach(HtmlNode link in document.DocumentElement.SelectNodes("//img[contains(@src, '_412s.jpg')]") 
    { 
     XmlElement img = output.CreateElement(link.Name); 
     foreach(HtmlAttribute a in link.Attributes) 
     { 
      img.SetAttribute(a.Name, a.Value) 
     } 
     imgElements.AppendChild(img); 
    } 
    output.Save(@"C:\test.xml"); 
} 
+0

खैर मैं पेज उनके नाम में _412s.jpg है पर सभी छवियों की पहचान करने की जरूरत है और मैं उन्हें एक एक्सएमएल में जोड़ना चाहते हैं, हां, तो बाद में, मैं xml सूची और प्रदर्शन पढ़ सकते हैं लिंक मैं सभी तत्वों को निकालना चाहता हूं, न केवल एक। उनके नाम पर _412s.jpg के साथ सैकड़ों छवियां हैं। मैं उसे कैसे कर सकता हूँ? और एक्सएमएल लिखने का सबसे अच्छा तरीका कौन सा है, इसलिए मैं xml फ़ाइल पढ़ने पर बाद में फ़ोटो प्रदर्शित कर सकता हूं? –

+1

@ क्रिस्टीनाउर्सू मेरा अद्यतन उत्तर देखें, उम्मीद है कि आपके प्रश्न का उत्तर दें। –

+0

क्या आप जानते हैं कि विंडोज 8 के लिए कोड कैसे अनुकूलित करें? मैंने फिजलर एचटीएमएल चपलता पैक के बारे में पढ़ा है लेकिन मैं इसे समझ नहीं सकता। यह WebClient x = new WebClient() को नहीं पहचानता है; या XmlDocument आउटपुट = नया XmlDocument(); या बाहर। बचाओ (@ "सी: \ test.xml"); क्या आप मेरी मदद कर सकते हैं? –