Pregunta

Quiero analizar la tabla HTML usando HTML paquete de agilidad. Quiero extraer sólo algunos datos de las columnas predefinidas de la mesa.

Pero yo soy nuevo en el análisis y la agilidad html paquete y lo he intentado, pero no sé cómo utilizar el paquete de la agilidad del HTML para mi necesidad.

Si alguien entonces me conoce dar ejemplo si es posible

EDIT:

¿Es posible analizar tabla html como si queremos extraer sólo los datos de los nombres de columna decidido? Al igual que hay 4 columnas nombre, dirección, PhnO y quiero extraer sólo los datos de nombre y dirección.

¿Fue útil?

Solución

No es un ejemplo de que en los foros de discusión aquí . Desplazarse un poco para ver la respuesta tabla. Me hubiera gustado que proporcionarían mejores muestras que eran más fáciles de encontrar.

EDIT: Para extraer los datos de las columnas específicas que tendría que encontrar primero las etiquetas <th> que corresponden a las columnas que desee y recuerde sus índices. A continuación, tendría que encontrar las etiquetas <td> para los mismos índices. Asumiendo que conoce los índices de las columnas se 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 usted no sabe los índices de las columnas que podría hacer todo el asunto como este. 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
        }
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top