C# 使用HtmlAlityPack选择所有DOM元素

C# 使用HtmlAlityPack选择所有DOM元素,c#,html,.net,dom,html-agility-pack,C#,Html,.net,Dom,Html Agility Pack,我一直在寻找类似的问题,并在网上搜索,但我似乎找不到解决办法。我试图做的是按顺序选择所有DOM元素(等等),然后将它们放入arraylist或其他东西中 目前我有 public void Parse() { HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument(); // There are various options, set as needed

我一直在寻找类似的问题,并在网上搜索,但我似乎找不到解决办法。我试图做的是按顺序选择所有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、标题、图像等),但输出结束标记为“#text”。我假设这是因为标记以“/”开头,如何正确读取所有DOM元素?

“#text”是文本节点的名称,结束标记在DOM中不表示为任何唯一的标记

<div><span>foo</span> bar</div>
我怀疑您看到的
#text
元素是换行符,而不是结束标记。例如,此html输入:

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

这意味着,选择当前元素的所有具有任何名称的子元素(
*
)。

请提供示例输入并清理代码(删除注释/空检查)以仅显示问题。请注意,“#text”是文本节点的名称。。。结束标记没有自己的节点。这很好地回答了我的问题。如果我不能得到结束标签,那么我需要找到一个新的解决方案。谢谢。+1-换行符也显示为文本,这很好,并且是跳过文本节点的方法。
<div>
    <a href="http://example.org"></a>
</div>
div
#text   <- line break between <div> and <a>
a
#text  <- line break between </a> and </div>
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//*"))
{
    Console.WriteLine(node.Name);
}