2012-11-17 16 views
5

Jestem nowicjuszem C# i naprawdę potrzebuję pomocy w następującym problemie. Chcę wyodrębnić adresy URL ze stron internetowych, które mają określony wzorzec. Na przykład chcę wyodrębnić wszystkie obrazy, które mają następujący wzór nazwa_412s.jpg. Używam następującego kodu do wyodrębniania obrazów z html, ale nie wiem, jak to zaadaptować.Wyodrębnianie obrazów z html w języku C# przy użyciu pakietu agility html i zapisywanie ich w pliku 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); 

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

również trzeba zapisać wyniki w pliku xml. Czy możesz mi w tym pomóc?

Dziękujemy!

Odpowiedz

3

Aby ograniczyć wyniki zapytania, musisz dodać warunek do XPath. Na przykład: //img[contains(@src, 'name_412s.jpg')] ograniczy wyniki tylko do elementów img, które mają atrybut src, który zawiera tę nazwę pliku.

Jeśli chodzi o zapisywanie wyników w formacie XML, należy utworzyć nowy dokument XML, a następnie skopiować pasujące do niego elementy. Ponieważ nie będzie można bezpośrednio zaimportować węzła HtmlAgilityPack do XmlDocument, musisz ręcznie skopiować wszystkie atrybuty. Na przykład:

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

No muszę zidentyfikować wszystkie obrazy na stronie, które mają _412s.jpg w ich imieniu i chcę dodać je w formacie XML, więc później, mogę czytać listę XML i wyświetlacz połączenia. Chcę wyodrębnić wszystkie elementy, nie tylko jeden. Istnieją setki zdjęć z _412s.jpg w ich nazwie. Jak mogę to zrobić? i która jest najlepsza metoda zapisu pliku xml, dzięki czemu mogę wyświetlać zdjęcia później, czytając plik xml? –

+1

@CristinaUrsu Zobacz moją zaktualizowaną odpowiedź, mam nadzieję, że odpowiada na twoje pytanie. –

+0

czy wiesz, jak zaadaptować kod dla Windows 8? Czytałem o pakiecie agility fizzler html, ale nie mogę tego rozgryźć. Nie rozpoznaje WebClient x = new WebClient(); lub XmlDocument output = new XmlDocument(); lub out.Save (@ "C: \ test.xml") ;. Możesz mi pomóc? –

Powiązane problemy