質問: У меня есть текущий макет 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 получает 2-й элемент `` из всех `` s, возвращаемых внутренней `//table[2]//tbody//tr//td//table` XPath `//table[2]//tbody//tr//td//table` . Затем из этой `` продолжайте возвращать потомки `//tbody//tr` элементов.