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

zlslch 阅读:16 2024-11-01 17:39:52 评论:0

如何使用 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#
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号