Получить первую и вторую ячейки каждой строки таблицы 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