obtén todos los ID de divs en una página html usando Html Agility Pack

c# html-agility-pack

Pregunta

¿Cómo obtengo todos los identificadores de divs en una página html usando Html Agility Pack? Estoy tratando de obtener todos los identificadores y ponerlos en una colección.

<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>

Código:

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument(); 
htmlDoc.OptionFixNestedTags=true;
htmlDoc.Load(filePath);    
HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("div"); 

¿Cómo consigo la colección de todas las identificaciones de los divs?

Respuesta aceptada

Si solo desea los ID, puede obtener una colección de esos nodos de atributo de id lugar de obtener una colección de los nodos del elemento div . Por ejemplo:

List<string> ids = new List<string>();
foreach(XmlNode node in doc.SelectNodes("//div/@id"))
{
    ids.Add(node.InnerText);
}

Esto omitirá los elementos div que no tienen una ID, como el elemento <div class='myclass1'> en su ejemplo.

"//div/@id" es una cadena XPath. XPath es una tecnología que es muy útil para aprender si se maneja mucho con XML, o en este caso, HTML a través de la biblioteca de paquetes de agilidad. XPath es un estándar de la industria que le permite seleccionar nodos coincidentes en un documento XML.

  • // significa que desea que seleccione el siguiente nodo como hijo del nodo actual, o en cualquiera de sus descendientes. Dado que el nodo actual es el nodo raíz del documento, este encontrará nodos coincidentes en cualquier parte del documento.
  • div es un nombre de elemento que queremos hacer coincidir. Entonces, en este caso, le estamos diciendo que busque todos los elementos div en cualquier parte del documento.
  • / indica que desea un nodo hijo. En este caso, el atributo id es un elemento secundario del elemento div , por lo que primero decimos que queremos el elemento div , luego necesitamos la barra diagonal para decir que queremos uno de los nodos secundarios del elemento div .
  • @id significa que queremos encontrar todos los atributos de id . El símbolo @ indica que es un nombre de atributo en lugar de un nombre de elemento.

Respuesta popular

Puedes obtener la colección de div pasando la sintaxis de xpath

Me gusta esto

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

    htmlDoc.OptionFixNestedTags=true;

    htmlDoc.Load(filePath);

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


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué