c# - 使用 Html Agility Pack 获取 html 页面上的所有 div id

标签 c# html-agility-pack

如何使用 Html Agility Pack 获取 html 页面上的所有 div id。我正在尝试获取所有 ID 并将它们放入一个集合中。

<p>
    <div class='myclass1'>
        <div id='f'>
        </div>  
        <div id="myclass2">
            <div id="my"><div id="h"></div><div id="b"></div></div>
        </div>
    </div>
</p>

代码:

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument(); 
htmlDoc.OptionFixNestedTags=true;
htmlDoc.Load(filePath);    
HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("div"); 

如何获取所有 div id 的集合?

最佳答案

如果您只想要 ID,可以获取这些 ID 的集合 id属性节点而不是获取 div 的集合元素节点。例如:

List<string> ids = new List<string>();
foreach(XmlNode node in doc.SelectNodes("//div/@id"))
{
    ids.Add(node.InnerText);
}

这将跳过 div没有 ID 的元素,例如 <div class='myclass1'>您示例中的元素。

"//div/@id"是一个 XPath 字符串。如果您经常处理 XML,或者在这种情况下,通过 agility pack 库处理 HTML,那么 XPath 是一种很容易学习的技术。 XPath 是一种行业标准,允许您在 XML 文档中选择匹配的节点。

  • //意味着您希望它选择以下节点作为当前节点或其任何后代的子节点。由于当前节点是文档的根节点,这将在文档的任何位置找到匹配的节点。
  • div是我们要匹配的元素名称。所以,在这种情况下,我们告诉它找到所有 div文档中任意位置的元素。
  • /表明你想要一个子节点。在这种情况下 id属性是 div 的子项元素,所以首先我们说我们想要 div元素,那么我们需要正斜杠来表示我们想要 div 之一元素的子节点。
  • @id意味着我们要找到所有 id属性。 @符号表示它是属性名而不是元素名。

关于c# - 使用 Html Agility Pack 获取 html 页面上的所有 div id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11526554/

相关文章:

html - Xpath选择所有子节点

C# Html Agility Pack dd和dt标签解析问题

c# - 如何在 ASP.NET Core 中获取 Active Directory 当前用户显示名称?

c# - 警告 : MapServiceToken not specified

c# - HttpClient 没有获得完整的网站 html 源代码

c# - HTML敏捷包: Issues getting content of anchor tag within a string

c# - 如何使XPath仅在每个表中搜索?

c# - C# 中可空类型的替代方法

c# - 使用 null 条件运算符和操作

c# - 两个 DateTimes C# 之间的区别?