Получить все идентификаторы div на html-странице с помощью Html Agility Pack
Как получить все идентификаторы div на html-странице с помощью Html Agility Pack. Я пытаюсь получить все идентификаторы и положить их в коллекцию.
<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?
2 ответа
Если вы просто хотите идентификаторы, вы можете получить коллекцию этих id
атрибутивные узлы вместо получения коллекции div
узлы элементов. Например:
List<string> ids = new List<string>();
foreach(XmlNode node in doc.SelectNodes("//div/@id"))
{
ids.Add(node.InnerText);
}
Это пропустит div
элементы, которые не имеют идентификатора, такие как <div class='myclass1'>
элемент в вашем примере.
"//div/@id"
строка XPath XPath - это технология, которую очень удобно изучать, если вы много работаете с XML или, в данном случае, с HTML через библиотеку Agility Pack. XPath - это отраслевой стандарт, который позволяет выбирать подходящие узлы в документе XML.
//
означает, что вы хотите выбрать следующий узел в качестве дочернего узла текущего узла или любого из его потомков. Поскольку текущий узел является корневым узлом документа, он найдет совпадающие узлы в любом месте документа.div
это имя элемента, которому мы хотим соответствовать. Итак, в этом случае мы говорим, чтобы найти всеdiv
элементы в любом месте документа./
указывает, что вы хотите дочерний узел. В этом случаеid
атрибут является потомкомdiv
элемент, поэтому сначала мы говорим, что мы хотимdiv
элемент, то нам нужно косая черта, чтобы сказать, что мы хотим один изdiv
дочерние узлы элемента.@id
означает, что мы хотим найти всеid
атрибутов.@
Символ указывает, что это имя атрибута, а не имя элемента.
Yo может получить коллекцию div, передав синтаксис xpath
Как это
HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.OptionFixNestedTags=true;
htmlDoc.Load(filePath);
foreach(HtmlNode div doc.DocumentElement.SelectNodes("//div"))
{
///.. code here
}