使用html agility pack從c#中的html中提取圖像URL,並將它們寫入xml文件中

c# html-agility-pack xml

我是c#的新手,我真的需要幫助解決以下問題。我希望從具有特定模式的網頁中提取照片網址。例如,我希望提取具有以下模式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文件中寫入結果。你能幫幫我嗎?

謝謝 !

一般承認的答案

要限制查詢結果,需要向XPath添加條件。例如, //img[contains(@src, 'name_412s.jpg')]會將結果限制為僅包含具有包含該文件名的src屬性的img元素。

至於將結果寫入XML,您需要創建一個新的XML文檔,然後將匹配的元素複製到其中。由於您無法將HtmlAgilityPack節點直接導入XmlDocument,因此您必須手動複製所有屬性。例如:

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");
}


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因