htmlのagility packを使用してc#でHTMLからイメージURLを抽出し、xmlファイルに書き込む

c# html-agility-pack xml

質問

私はC#の初心者です。私は本当に以下の問題について助けが必要です。特定のパターンを持つウェブページから写真のURLを抽出したいと思います。たとえば、次のパターン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");
}



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ