получить все идентификаторы divs на странице html с помощью Html Agility Pack

c# 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?

Принятый ответ

Если вам просто нужны идентификаторы, вы можете получить коллекцию этих узлов атрибутов 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 через библиотеку гибких пакетов. 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
 }


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow