获取每个HTML表行的第一个和第二个单元格

.net html-agility-pack xpath

我正在尝试使用HTMLAgilityPack在每一行中获取一些特定的单元格。

foreach (HtmlNode row in ContentNode.SelectNodes("descendant::tr"))
{
    //Do something to first cell
    //Do something to second cell
}

有更多的细胞,每个细胞需要一些专门的治疗。我想有一种方法可以使用XPath来做到这一点,但我对此毫无用处。可能有类似的东西

foreach (HtmlNode row in ContentNode.SelectNodes("descendant::tr"))
{
    //Do something to first cell
    //Do something to second cell
}

一般承认的答案

要获取每行的第一个单元格,您可以执行以下操作:

// from row
var firstCell = row.SelectSingleNode("td[1]");

// each first cell in a table (note: tbody is not always there)
var allFirstCells = table.SelectNodes("tbody/tr/td[1]");

换句话说,使用方括号和要选择的单元格编号。一个例外是最后一个单元格,你可以使用last()获得如下:

// from row
var firstCell = row.SelectSingleNode("td[1]");

// each first cell in a table (note: tbody is not always there)
var allFirstCells = table.SelectNodes("tbody/tr/td[1]");

如果要将单元格放在当前单元格旁边,可以执行以下操作:

// from row
var firstCell = row.SelectSingleNode("td[1]");

// each first cell in a table (note: tbody is not always there)
var allFirstCells = table.SelectNodes("tbody/tr/td[1]");

您可能希望检查null的返回值,这意味着您要么输入错误,要么加载的DOM树不包含您要求的单元格。


热门答案

而不是

descendant::tr

用途

descendant::tr



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因