Ottieni la prima e la seconda cella di ogni riga della tabella HTML

.net html-agility-pack xpath

Domanda

Sto cercando di ottenere solo alcune celle specifiche in ogni riga utilizzando HTMLAgilityPack.

foreach (HtmlNode row in ContentNode.SelectNodes("descendant::tr"))
{
    //Do something to first cell
    //Do something to second cell
}

Ci sono più cellule e ogni cellula ha bisogno di un trattamento specializzato. Immagino che ci sia un modo per farlo usando XPath, ma sono abbastanza inutile. C'è forse qualcosa di simile

var cell1 = row.SelectSingleNode("descendant::td:first");

Risposta accettata

Per ottenere ogni prima cella di una riga secondaria, puoi eseguire le seguenti operazioni:

// 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]");

In altre parole, usa le parentesi quadre e il numero di cellulare che desideri selezionare. Un'eccezione è l'ultima cella, che puoi usare usando last() come segue:

// from row
var lastCell = row.SelectSingleNode("td[last()]");

// each last cell in a table
var allLastCells = table.SelectNodes("tbody/tr/td[last()]");

Se vuoi ottenere la cella accanto a una cella corrente, puoi fare qualcosa di simile:

// from row
var firstCell = row.SelectSingleNode("td[1]");
var siblingCell = firstCell.SelectSingleNode("./following-sibling::td");

Potresti voler controllare i valori di ritorno per null, il che significa che hai un errore di battitura o che l'albero DOM che hai caricato non contiene la cella richiesta.


Risposta popolare

Invece di :

descendant::tr

usare :

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


Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché