Paquete de agilidad HTML

.net c# html-agility-pack html-parsing winforms

Pregunta

Quiero analizar la tabla html usando el paquete de agilidad html. Quiero extraer solo algunos datos de columna predefinidos de la tabla.

Pero soy nuevo en el análisis y en el paquete de agilidad html y lo he intentado pero no sé cómo usar el paquete de agilidad html para mi necesidad.

Si alguien sabe entonces dame un ejemplo si es posible.

EDITAR:

¿Es posible analizar la tabla html como si quisiéramos extraer solo los datos de los nombres de columna decididos? Al igual que hay 4 columnas nombre, dirección, phno y quiero extraer solo datos de nombre y dirección.

Respuesta aceptada

Hay un ejemplo de eso en los foros de discusión aquí . Desplácese hacia abajo un poco para ver la respuesta de la tabla. Me gustaría que proporcionaran mejores muestras que fueran más fáciles de encontrar.

EDITAR: para extraer datos de columnas específicas, primero tendría que encontrar las etiquetas <th> que correspondan a las columnas que desea y recordar sus índices. Entonces necesitarías encontrar las etiquetas <td> para los mismos índices. Suponiendo que conoce los índices de las columnas, podría hacer algo como esto:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("http://somewhere.com");
HtmlNode table = doc.DocumentNode.SelectSingleNode("//table");
foreach (var row in table.SelectNodes("//tr"))
{
    HtmlNode addressNode = row.SelectSingleNode("td[2]");
    //do something with address here
    HtmlNode phoneNode = row.SelectSingleNode("td[5]");
    // do something with phone here
}

Edit2: Si no conoces los índices de las columnas, podrías hacer todo esto así. No he probado esto.

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("http://somewhere.com");
var tables = doc.DocumentNode.SelectNodes("//table");

foreach(var table in tables)
{
    int addressIndex = -1;
    int phoneIndex = -1;
    var headers = table.SelectNodes("//th");
    for (int headerIndex = 0; headerIndex < headers.Count(); headerIndex++)
    {
        if (headers[headerIndex].InnerText == "address")
        {
            addressIndex = headerIndex;
        }
        else if (headers[headerIndex].InnerText == "phone")
        {
            phoneIndex = headerIndex;
        }
    }

    if (addressIndex != -1 && phoneIndex != -1)
    {
        foreach (var row in table.SelectNodes("//tr"))
        {
            HtmlNode addressNode = row.SelectSingleNode("td[addressIndex]");
            //do something with address here
            HtmlNode phoneNode = row.SelectSingleNode("td[phoneIndex]");
            // do something with phone 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é