質問: 我有當前的HTML佈局 ``` //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] ``` 我試圖獲取`//table[1]//table[2]` ,但我仍然得到以下的空HtmlNode( `System.NullReferenceException` ): **不工作:** `doc.DocumentNode.SelectSingleNode("//table[2]//tbody//tr//td//table[2]//tbody//tr");` , 我不確定為什麼會出現這種情況,因為當我嘗試獲取`//table[1]//table[1]`它可以正常使用這種語法 **works:** `doc.DocumentNode.SelectSingleNode("//table[2]//tbody//tr//td//table[1]//tbody//tr");` 我誤解了索引如何與Html Agility Pack一起使用?
回答: `//table[2]`返回**同一父節點中的**第二個``元素,因為在XPath中: > ( `]` )具有比( `//`和`/` )更高的優先級(優先級)。 [ [供參考 ] > > 在您的情況下,每個``只有一個`` `` ,因此Xpath表達式什麼都沒有返回。一種可能的解決方案是使用括號來改變優先級: ``` (//table[2]//tbody//tr//td//table)[2]//tbody//tr ``` 在Xpath之上,從內部XPath `//table[2]//tbody//tr//td//table`返回的所有``獲取第二個``元素。然後從``繼續返回後代`//tbody//tr`元素。