2016-05-22 6 views
0

Wie kann ich die sechste Spalte in dieser HTML-Tabelle (mit zum Beispiel HTML Agility Pack oder Regex) herausfinden?C# Finden Sie heraus variierende Spalte in HTML-Tabelle

<tr><td>So, 22.05.16</td><td>1</td><td>D</td><td>E</td><td>190</td><td>DifferentThings</td></tr> 

In der letzten Spalte könnte alles stehen und das ist nur eine Reihe von vielen, so mag ich die volle letzte Spalte mit jedem Eintrag.


Edit:

Wenn ein Rohling

<td></td> 

in der sechsten Reihe bekomme ich immer ein

System.NullReferenceException 

Was shoud ich jetzt tun?

innerTextOfLastCell = lastTdCell.InnerText.Trim(); 

verursacht den Fehler


Edit:

es gelöst!

gerade eingegeben:

if (lastTdCell != null) //Not lastTdCell.InnerText.Trim()! 
{ 
    innerTextOfLastCell = lastTdCell.InnerText.Trim(); 
    s = s + innerTextOfLastCell + "\n"; 
    run.Text = s; 
} 


else 
{ 
    s = s + "\n\n"; 
    run.Text = s; 
} 
+2

einen Blick hier haben: http://stackoverflow.com/questions/16474659/how-to-get-the-value-from-a-specific-cell-c-sharp-html- agility-pack –

+0

Vielen Dank :). –

Antwort

2

Mit HtmlAgilityPack, dies sollte funktionieren, unabhängig von der Anzahl der Spalten der Tabelle hat.

var html = new HtmlDocument(); 
html.LoadHtml("<table><tr><td>So, 22.05.16</td><td>1</td><td>D</td><td>E</td><td>190</td><td>DifferentThings</td></tr></table>"); 
var root = html.DocumentNode; 
var tableNodes = root.Descendants("table"); 
var innerTextOfLastCell = string.Empty; 
foreach (var tbs in tableNodes.Select((tbNodes, i) => new { tbNodes = tbNodes, i = i })) 
{ 
    var trs = tbs.tbNodes.Descendants("tr"); 
    foreach (var tr in trs.Select((trNodes, j) => new { trNodes = trNodes, j = j })) 
    { 
     var tds = tr.trNodes.Descendants("td"); 
     var lastTdCell = tds.LastOrDefault(); 
     innerTextOfLastCell = lastTdCell.InnerText.Trim(); 
    } 
} 

[Bearbeiten]

Wenn Sie die andere Option aus How to get the value from a specific cell C# Html-Agility-Pack verwenden wollten, dann könnten Sie den folgenden Code versuchen:

HtmlNode lastTdnode = root.SelectSingleNode("//table[1]/tr[last()]/td[last()]"); 

Dies gibt Ihnen die zuletzt<td> von der letzten<tr> aus der erste<table>

Wenn Sie die sechste Zelle wollten Sie so etwas wie diese verwenden können, aber Sie werden das gleiche Ergebnis wie oben:

HtmlNode sixthTdNode = root.SelectSingleNode("//table[1]/tr[last()]/td[6]"); 

Wenn Sie es noch mehr mischen wollten können Sie versuchen Sie dies:

HtmlNode nthTdNode = root.SelectSingleNode("//table[1]/tr[last()]/td[" + 6 + "]"); 
+0

Ich erhalte jedes Mal eine Fehlermeldung, wenn ich versuche, sie mit mehr als einer Tabelle auszuführen. (Siehe Bearbeiten in Frage). –

+1

Das ist seltsam, der Code soll unabhängig von der Anzahl der Tabellen und/oder Spalten dynamisch sein. Wenn Sie das Problem noch nicht behoben haben, können Sie den von Ihnen verwendeten Code posten und ich kann ihn überprüfen. –

+0

Ok danke :). Sry, um das zu fragen, aber was ist in diesem Fall die Wurzel? –

Verwandte Themen