0

誰かが C# の Agility で Html の連続タグを解析する際の問題を解決するのを手伝ってくれませんか? 以下にリストされているように、2つの質問があります。

この場合、次の Html を解析し、それらを構造体 (リスト、スタックなど) に格納して、これらのデータを効果的に使用できるようにします。

<h3> header </h3>
<p> paragraph 1</p>
<p>
<a href="www.google.com">Google</a>
<a href="www.gizmodo.com">Gizmodo</a>
</p>
<ul> 
<li> something is here with a download
<a href="www.google.com">link</a>
</li>
<li> hello 
<img src="www.imagesource.com"/>
</li>
</ul>
  1. これらのデータを順次解析する方法は?

    を使用するvar ParaTags = HtmlDocument.DocumentNode.Descendants("p");と、すべての「p」タグしか取得できません。しかし、「p」は「h3」内にないため、「h3」、「p」の順に取得する方法がわかりません。

次のコードは、すべてのハイパーリンクを返します。

var links =
    from paras in document.DocumentNode.Descendants("p")
    from hyperLinks in paras.Descendants("a").Where(x => x.Attributes["href"].Value != "")
    select hyperLinks;
  1. 文字列、ハイパーリンク、画像が混在するこれらのコンテンツを解析して保存する最善の方法は何ですか? 後で効率的に出力できますか?リスト、スタック?別の言い方をすれば、html から可能なすべてのコンテンツを保存し、可能であればその形式を予約したいと考えています。そのため、アプリにリロードすると、コンテンツを適切な形式で類似させることができます。

ありがとうございました!

4

1 に答える 1

2

hrefすべてのsrc属性を抽出したい場合は、これを試してください:

using System;
using System.Linq;
using HtmlAgilityPack;

public class Program
{
    static void Main()
    {
        var document = new HtmlDocument();
        document.Load("test.html");
        var links =
            from element in document.DocumentNode.Descendants()
            let href = element.Attributes["href"]
            let src = element.Attributes["src"]
            where href != null || src != null
            select href != null ? href.Value : src.Value;

        foreach (var link in links)
        {
            Console.WriteLine(link);
        }
    }
}

出力:

www.google.com
www.gizmodo.com
www.google.com
www.imagesource.com
于 2012-08-15T07:29:19.957 に答える