c# 找出 html table 中的可变列

c# Find out variating column in html table

如何找到此 html table 中的第六列(例如使用 HTML Agility Pack 或 Regex)?

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

最后一列可以放置任何内容,这只是许多行中的一行,所以我想要包含每个条目的完整最后一列。


编辑:

如果有空格

<td></td>

在第 6 行我总是得到

System.NullReferenceException

我现在该怎么办?

innerTextOfLastCell = lastTdCell.InnerText.Trim();

导致错误


编辑:

解决了!

刚刚输入:

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;
}

使用 HtmlAgilityPack,无论 table 有多少列,这都应该有效。

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();
    }
}

[编辑]

如果您确实想使用 How to get the value from a specific cell C# Html-Agility-Pack 中的其他选项,那么您可以尝试以下代码:

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

这将为您提供 last <td> 来自 last <tr> 来自 第一<table>

如果你想要第六个单元格,你可以使用这样的东西,但会得到与上面相同的结果:

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

如果你想把它混合得更多,你可以试试这个:

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