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

时间:2010-07-10 19:29:20

标签: .net xpath html-agility-pack

我正在尝试使用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");

2 个答案:

答案 0 :(得分:2)

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

// 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树不包含您要求的单元格。

答案 1 :(得分:2)

而不是

descendant::tr

使用

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