HTML Agility Pack Parse-Tabelle

c# html-agility-pack

Frage

Ich habe einen Tisch wie folgt:

<table border="0" cellpadding="0" cellspacing="0" id="table2">
    <tr>
        <th>Name
        </th>
        <th>Age
        </th>
    </tr>
        <tr>
        <td>Mario
        </td>
        <th>Age: 78
        </td>
    </tr>
            <tr>
        <td>Jane
        </td>
        <td>Age: 67
        </td>
    </tr>
            <tr>
        <td>James
        </td>
        <th>Age: 92
        </td>
    </tr>
</table>

und ich verwende html agility pack um es zu parsen. Ich habe diesen Code ausprobiert, aber er liefert keine erwarteten Ergebnisse: Hier ist der Code:

foreach (HtmlNode tr in doc.DocumentNode.SelectNodes("//table[@id='table2']//tr"))
            {
                //looping on each row, get col1 and col2 of each row
                HtmlNodeCollection tds = tr.SelectNodes("td");
                for (int i = 0; i < tds.Count; i++)
                {
                    Response.Write(tds[i].InnerText);
                }
            }

Ich erhalte jede Spalte, weil ich gerne etwas an den zurückgegebenen Inhalten verarbeiten würde.

Was mache ich falsch?

Beliebte Antwort

Sie können den Zelleninhalt aus Ihrer äußeren foreach-Schleife herausholen:

foreach (HtmlNode td in doc.DocumentNode.SelectNodes("//table[@id='table2']//tr//td"))  
{  
    Response.Write(td.InnerText);   
}  

Außerdem würde ich empfehlen, den inneren Text zu entziffern und zu de-qualifizieren, um sicherzustellen, dass er sauber ist:

Response.Write(HtmlEntity.DeEntitize(td.InnerText).Trim())

In deiner Quelle haben die Zellen für [Alter: 78] und [Alter: 92] am Anfang ein <th> -Tag anstelle von <td>



Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum