HTMLAgilityPackですべてのDOM要素を選択する

.net c# dom html html-agility-pack

質問

私は同様の質問をしてオンラインで検索してきましたが、私は解決策を見つけることができません。私がしようとしているのは、すべてのDOM要素を順番に(など)選択して、それらをarraylistなどに配置することです。

現在私は持っている

public void Parse()
    {
        HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();

        // There are various options, set as needed
        //htmlDoc.OptionFixNestedTags = true;

        // filePath is a path to a file containing the html
        htmlDoc.Load("Test.html");

        // Use:  htmlDoc.LoadHtml(xmlString);  to load from a string (was htmlDoc.LoadXML(xmlString)

        // ParseErrors is an ArrayList containing any errors from the Load statement
        if (htmlDoc.ParseErrors != null && htmlDoc.ParseErrors.Count() > 0)
        {
            Console.WriteLine("There was an error parsing the HTML file");
        }
        else
        {
            if (htmlDoc.DocumentNode != null)
            {
                htmlDoc.DocumentNode.Descendants();

                Console.WriteLine("document node not null");
                //HtmlAgilityPack.HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("//body");

                foreach (HtmlNode node in htmlDoc.DocumentNode.Descendants())
                {
                    Console.WriteLine(node.Name);
                }
            }
        }
    }

コードの出力にはノード名(html、title、imageなど)が入りますが、終了タグは "#text"として出力されます。これはタグが "/"で始まるからです。すべてのDOM要素を適切に読み取るにはどうすればよいですか?

受け入れられた回答

"#text"はテキストノードの名前であり、終了タグはDOM内でユニークなものとして表現されません。

<div><span>foo</span> bar</div>

あなたのような木を与えるだろう

<div><span>foo</span> bar</div>

人気のある回答

私はあなたが見た#text要素がタグを閉じるのではなく改行であると#textています。たとえば、次のようなhtml入力:

<div>
    <a href="http://example.org"></a>
</div>

あなたのコードを使用して出力されます:

<div>
    <a href="http://example.org"></a>
</div>

代わりにこのXPathクエリを使用して、プレーンテキストノードでないすべての要素を取得できます(不要な改行をスキップします)。

<div>
    <a href="http://example.org"></a>
</div>

そのXPathは、名前( * )を持つ現在の要素のすべての子孫を選択することを意味します。




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