質問: Ho il layout HTML corrente ``` //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] ``` Sto cercando di ottenere i dati all'interno di `//table[1]//table[2]` , ma continuo a ricevere un HtmlNode null ( `System.NullReferenceException` ) per quanto segue: **does not 'work:** `doc.DocumentNode.SelectSingleNode("//table[2]//tbody//tr//td//table[2]//tbody//tr");` , Non sono sicuro del motivo per cui ciò accade quando provo ad ottenere dati per `//table[1]//table[1]` funziona perfettamente con questa sintassi **works:** `doc.DocumentNode.SelectSingleNode("//table[2]//tbody//tr//td//table[1]//tbody//tr");` Sto fraintendendo il modo in cui l'indicizzazione funziona con Html Agility Pack?
回答: `//table[2]` restituisce il secondo elemento `` all'interno **dello stesso genitore** perché in XPath: > Il ( `]` ) ha una precedenza (priorità) maggiore di ( `//` e `/` ). [ [Per riferimento ] > > Nel tuo caso, c'è un solo `` in ogni `` , quindi l'espressione Xpath non restituiva nulla. Una possibile soluzione è mettere parentesi per alterare la precedenza: ``` (//table[2]//tbody//tr//td//table)[2]//tbody//tr ``` Sopra Xpath ottiene il secondo elemento `` da tutti i `` s restituiti dalla `//table[2]//tbody//tr//td//table` interna XPath `//table[2]//tbody//tr//td//table` . Quindi da quel `` , continua a restituire discendenti `//tbody//tr` elementi.