6 Stimmen

HTML-Beweglichkeitspaket

Ich möchte die Html-Tabelle mit dem Html Agility Pack parsen. Ich möchte nur einige vordefinierte Spaltendaten aus der Tabelle extrahieren.

Aber ich bin neu im Parsing und im html agility pack und ich habe es versucht, aber ich weiß nicht, wie ich das html agility pack für meinen Bedarf nutzen kann.

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

EDIT :

Ist es möglich, die html-Tabelle zu analysieren, wenn wir nur die Daten der bestimmten Spaltennamen extrahieren wollen? Zum Beispiel gibt es 4 Spalten: Name, Adresse, Telefonnummer, und ich möchte nur die Daten von Name und Adresse extrahieren.

6voto

Mike Two Punkte 42868

Ein Beispiel dafür findet sich in den Diskussionsforen aquí . Scrollen Sie ein wenig nach unten, um die Antwort in der Tabelle zu sehen. Ich wünschte, sie würden bessere Beispiele liefern, die leichter zu finden sind.

EDIT: Um Daten aus bestimmten Spalten zu extrahieren, müssen Sie zunächst die <th> Tags, die den gewünschten Spalten entsprechen, und merken Sie sich deren Indizes. Sie müssen dann die <td> Tags für dieselben Indizes. Angenommen, Sie kennen die Indizes der Spalten, könnten Sie so vorgehen:

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
}

Bearbeiten2: Wenn Sie die Indizes der Spalten nicht kennen, können Sie das Ganze auch so machen. Ich habe dies 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
        }
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X