質問: 我有当前的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`元素。