使用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属性节点的集合,而不是获取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字符串。 XPath是一种技术,如果您处理XML很多,或者在这种情况下,通过敏捷包库来处理HTML,这种技术可以很方便地学习。 XPath是一种行业标准,允许您在XML文档中选择匹配的节点。

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

热门答案

Yo可以通过传递xpath语法来获取div的集合

喜欢这个

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();

    htmlDoc.OptionFixNestedTags=true;

    htmlDoc.Load(filePath);

 foreach(HtmlNode div doc.DocumentElement.SelectNodes("//div"))
 {
///.. code here
 }


许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因