c#找出html表中的variating列

时间:2016-05-22 18:30:19

标签: c# uwp windows-10-universal

如何找到此html表中的第六列(例如使用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;
}

1 个答案:

答案 0 :(得分:2)

使用HtmlAgilityPack,无论表格的列数是多少,这都应该有效。

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()]");

这将从第一个 {{1}中的最后 <td>为您提供最后 <tr> }

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

<table>

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

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