Html Agility Pack, SelectNodes из узла

.net c# html-agility-pack

Вопрос

Почему это отображает все мои элементы <li> в моем документе?

HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(url);

var travelList = new List<Page>();
var liOfTravels = doc.DocumentNode.SelectSingleNode("//div[@id='myTrips']")
                     .SelectNodes("//li");

Я хочу получить все <li> элементы в <div> с id «myTrips».

Принятый ответ

Это немного запутанно, потому что вы ожидаете, что он будет делать selectNodes только с div с id «myTrips», однако если вы сделаете другой SelectNodes («// li»), он выполнит другой поиск в верхней части документа.

Я исправил это, объединив инструкцию в одну, но это будет работать только на веб-странице, где у вас есть только один div с идентификатором «mytrips». Запрос будет выглядеть так:

doc.DocumentNode.SelectNodes ("// div [@ id = 'myTrips'] // li");


Популярные ответы

var liOfTravels = doc.DocumentNode.SelectSingleNode("//div[@id='myTrips']")
                 .SelectNodes(".//li");

Обратите внимание на точку во второй строке. В основном в этом отношении HTMLAgitilityPack полностью полагается на синтаксис XPath, однако результат неинтуитивный, поскольку эти запросы фактически одинаковы:

doc.DocumentNode.SelectNodes("//li");
some_deeper_node.SelectNodes("//li");


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow