Obtenir les première et deuxième cellules de chaque ligne de tableau HTML

.net html-agility-pack xpath

Question

J'essaie d'obtenir seulement quelques cellules spécifiques dans chaque ligne en utilisant HTMLAgilityPack.

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

Il y a plus de cellules et chaque cellule nécessite un traitement spécialisé. J'imagine qu'il existe un moyen de faire cela en utilisant XPath, mais je suis plutôt inutile à cela. Y a-t-il peut-être quelque chose comme

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

Réponse acceptée

Pour obtenir chaque première cellule enfant d'une ligne, vous pouvez procéder comme suit:

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

En d’autres termes, utilisez les crochets et le numéro de cellule que vous souhaitez sélectionner. Une exception est la dernière cellule, que vous pouvez obtenir en utilisant last() comme suit:

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

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

Si vous souhaitez placer la cellule à côté d'une cellule en cours, vous pouvez procéder comme suit:

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

Vous pouvez vérifier les valeurs de retour pour la valeur null, ce qui signifie que vous avez une faute de frappe ou que l'arborescence DOM que vous avez chargée ne contient pas la cellule que vous avez demandée.


Réponse populaire

Au lieu de :

descendant::tr

utiliser :

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



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi