Получить первую и вторую ячейку каждой строки таблицы HTML - PullRequest
4 голосов
/ 10 июля 2010

Я пытаюсь получить только несколько определенных ячеек в каждой строке, используя 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 ]

2 голосов
/ 12 июля 2010

Вместо :

descendant::tr

используйте :

descendant::tr/td[not(position() >2)]
2 голосов
/ 11 июля 2010

Чтобы получить каждую первую ячейку, которая является дочерним элементом строки, вы можете сделать следующее:

// 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 нет запрошенной ячейки.

...