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