Recorrer todos los descendientes de un nodo e inspeccionarlos uno por uno

c# html-agility-pack linq xpath

Pregunta

Necesito hacer una lista de los registros en una página web específica. Tengo la fuente de la página en un archivo de texto. Necesito atravesar este nodo, elemento por elemento:

HtmlNodeCollection resultContainer = doc.DocumentNode.SelectNodes("//div[@class='result-list divider-y-5']");

Para cada elemento que necesito revisar el tipo (div, span, etc.), es "id" y sus atributos de "clase" para poder hacer mi lista de registros. No quiero una colección de todos ss. Eso no ayudará porque no sé a qué tipo de elemento enfrentaré mientras los recorro. Tengo que revisarlos todos. Porque todos los datos que necesito son hijos de la colección de nodos mencionada anteriormente. ¿Alguna sugerencia?

Respuesta aceptada

foreach(HtmlNode node in resultContainer)
{
    //check node type
    switch(node.Name)
    {
        case "div":
        {
            break;
        }   
        case "p":
        {
        }
        ///....etc
    }

    //get id
    String id = node.Attributes["id"].Value;

    //get class
    String class = node.Attributes["class"].Value;

}

Respuesta popular

Creo que es más fácil hacer que HtmlAgilityPack convierta el documento html a xml, por ejemplo:

doc.Load(htmlStream, true);
doc.OptionOutputAsXml = true;
doc.OptionFixNestedTags = true;
doc.OptionAutoCloseOnEnd = true;
doc.Save(/* your Xml stream or filename */);

Y luego use la api xml .NET normal (por ejemplo, usando XmlDocument o XDocument) para procesar el contenido.



Related

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é