C# 使用html Agility Pack获取html页面上的所有divs ID

C# 使用html Agility Pack获取html页面上的所有divs ID,c#,html-agility-pack,C#,Html Agility Pack,如何使用html Agility Pack获取html页面上的所有divs ID。我正在尝试获取所有ID并将其放入一个集合中 <p> <div class='myclass1'> <div id='f'> </div> <div id="myclass2"> <div id="my"><div id="h"></div>

如何使用html Agility Pack获取html页面上的所有divs 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>

如何获取所有div 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
 }

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

List<string> ids = new List<string>();
foreach(XmlNode node in doc.SelectNodes("//div/@id"))
{
    ids.Add(node.InnerText);
}
List id=new List();
foreach(doc.SelectNodes(“//div/@id”)中的XmlNode节点)
{
Add(node.InnerText);
}
这将跳过没有ID的
div
元素,例如示例中的
元素

“//div/@id”
是一个XPath字符串。如果您通过agility pack库大量处理XML,或者在本例中处理HTML,那么XPath是一种非常方便学习的技术。XPath是一种行业标准,允许您在XML文档中选择匹配的节点

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

那么这是否会查看html中的每个节点并检查其是否为div?然后在每个循环中,我将循环中的每个id添加到我的集合中?@Hello World//div将获得子对象及其所有子对象。问题是://div/@id是什么概念?forwardslashes和@this是什么意思mean@Hello-我在答案中添加了更多细节。
List<string> ids = new List<string>();
foreach(XmlNode node in doc.SelectNodes("//div/@id"))
{
    ids.Add(node.InnerText);
}