質問: Ich habe das aktuelle HTML-Layout ``` //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] ``` Ich versuche, die Daten in `//table[1]//table[2]` , aber ich bekomme immer eine Null HtmlNode ( `System.NullReferenceException` ) für Folgendes: **funktioniert nicht:** `doc.DocumentNode.SelectSingleNode("//table[2]//tbody//tr//td//table[2]//tbody//tr");` , Ich bin nicht sicher, warum dies auftritt, wenn ich versuche, Daten für `//table[1]//table[1]` , funktioniert es gut mit dieser Syntax **funktioniert:** `doc.DocumentNode.SelectSingleNode("//table[2]//tbody//tr//td//table[1]//tbody//tr");` Missverstehe ich, wie die Indexierung mit dem Html Agility Pack funktioniert?
回答: `//table[2]` zweite `` -Element im **selben Elternteil zurück,** weil in XPath: > Das ( `]` ) hat eine höhere Priorität (Priorität) als ( `//` und `/` ). [ [Als Referenz ] > > In Ihrem Fall gibt es nur eine `` in jedem `` , daher gab der Xpath-Ausdruck nichts zurück. Eine mögliche Lösung besteht darin, Klammern zu setzen, um die Priorität zu ändern: ``` (//table[2]//tbody//tr//td//table)[2]//tbody//tr ``` Über Xpath erhält das zweite `` -Element von allen `` s, die von der inneren XPath `//table[2]//tbody//tr//td//table` . Dann von dieser `` weiter Nachkommen `//tbody//tr` Elemente zurückgeben.