質問: J'ai la mise en page HTML actuelle ``` //table[1] //table[2] //table[1]//table[1] INFO 1 INFO 2 INFO 3 INFO 4 //table[1]//table[2] Name Quantity Apples 10 //table[1]//table[3] ``` J'essaie d'obtenir les données à l'intérieur de `//table[1]//table[2]` , mais je continue à obtenir un HtmlNode nul ( `System.NullReferenceException` ) pour les éléments suivants: **ne fonctionne pas:** `doc.DocumentNode.SelectSingleNode("//table[2]//tbody//tr//td//table[2]//tbody//tr");` , Je ne sais pas pourquoi cela se produit car lorsque j'essaie d'obtenir des données pour `//table[1]//table[1]` cela fonctionne parfaitement avec cette syntaxe **travaux:** `doc.DocumentNode.SelectSingleNode("//table[2]//tbody//tr//td//table[1]//tbody//tr");` Est-ce que je comprends mal comment fonctionne l'indexation avec Html Agility Pack?
回答: `//table[2]` renvoie le 2e élément `` dans **le même parent** car dans XPath: > Le ( `]` ) a une priorité plus élevée que ( `//` et `/` ). [ [Pour référence ] > > Dans votre cas, il n'y a qu'un seul `` dans chaque `` . Par conséquent, l'expression Xpath n'a renvoyé rien. Une solution possible consiste à mettre des parenthèses pour modifier la priorité: ``` (//table[2]//tbody//tr//td//table)[2]//tbody//tr ``` Au-dessus de Xpath, obtenez le deuxième élément `` de tous les `` renvoyés par le XPath `//table[2]//tbody//tr//td//table` intérieur `//table[2]//tbody//tr//td//table` . Ensuite, à partir de cette `` , continuez à renvoyer les éléments descendants `//tbody//tr` .