获取每个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来做到这一点,但我对此毫无用处。可能有类似的东西

var cell1 = row.SelectSingleNode("descendant::td:first");

一般承认的答案

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

// 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 lastCell = row.SelectSingleNode("td[last()]");

// each last cell in a table
var allLastCells = table.SelectNodes("tbody/tr/td[last()]");

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

// from row
var firstCell = row.SelectSingleNode("td[1]");
var siblingCell = firstCell.SelectSingleNode("./following-sibling::td");

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


热门答案

而不是

descendant::tr

用途

descendant::tr/td[not(position() >2)]


Related

许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow