Frage

Ich mag die HTML-Tabelle mit HTML Agility Pack analysieren. Ich möchte nur einige vordefinierte Spaltendaten aus der Tabelle extrahieren.

Aber ich bin neu in dem Parsen und html Agilität Pack und ich habe versucht, aber ich weiß nicht, wie das HTML Agility Pack für mein Bedürfnis zu verwenden.

Wenn jemand weiß, dann geben Sie mir Beispiel, wenn möglich

EDIT:

Ist es möglich, wie HTML-Tabelle zu analysieren, wenn wir wollen nur die entschiedenen Spaltennamen Daten extrahieren? Wie es gibt 4 Spalten Name, Adresse, phno und ich möchte nur Namens- und Adressdaten extrahieren.

War es hilfreich?

Lösung

Es ist ein Beispiel, dass in den Diskussionsforen hier . Blättern Sie ein wenig nach unten, um die Tabelle Antwort zu sehen. Ich wünsche, sie würden besser Proben zur Verfügung stellen, die leichter zu finden waren.

EDIT: So extrahieren Daten aus bestimmten Spalten würden Sie müssen zuerst die <th>-Tags finden, die den Spalten entsprechen, die Sie wollen, und erinnern sich an ihre Indizes. Sie würden dann die <td> Tags für die gleichen Indizes finden müssen. Angenommen, Sie kennen die Indizes der Spalten können Sie etwas tun:

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: Wenn Sie nicht über die Indizes der Spalten wissen könnte man das Ganze wie folgt tun. Ich habe nicht getestet.

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
        }
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top