如何使用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?
答案 0 :(得分:3)
如果您只想要ID,则可以获取这些id
属性节点的集合,而不是获取div
元素节点的集合。例如:
List<string> ids = new List<string>();
foreach(XmlNode node in doc.SelectNodes("//div/@id"))
{
ids.Add(node.InnerText);
}
这将跳过没有ID的div
元素,例如示例中的<div class='myclass1'>
元素。
"//div/@id"
是一个XPath字符串。 XPath是一种技术,如果您处理XML很多,或者在这种情况下,通过敏捷包库处理HTML,这种技术可以派上用场。 XPath是一种行业标准,允许您在XML文档中选择匹配的节点。
//
表示您希望它选择以下节点作为当前节点或其任何后代的子节点。由于当前节点是文档的根节点,因此可以在文档中的任何位置找到匹配的节点。div
是我们想要匹配的元素名称。因此,在这种情况下,我们告诉它在文档中的任何位置找到所有div
元素。/
表示您想要一个子节点。在这种情况下,id
属性是div
元素的子元素,因此首先我们说我们需要div
元素,然后我们需要正斜杠来表示我们想要其中一个{ {1}}元素的子节点。div
表示我们想要找到所有@id
属性。 id
符号表示它是属性名称而不是元素名称。答案 1 :(得分:2)
Yo可以通过传递xpath语法来获取div的集合
喜欢这个
HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.OptionFixNestedTags=true;
htmlDoc.Load(filePath);
foreach(HtmlNode div doc.DocumentElement.SelectNodes("//div"))
{
///.. code here
}