すべてのHTMLテーブル行の1番目と2番目のセルを取得する

.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)]


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ