Выберите только элементы в определенном DIV, используя HtmlAgilityPack

c# html-agility-pack

Вопрос

Я пытаюсь использовать HtmlAgilityPack, чтобы вытащить все ссылки со страницы, которые содержатся в div, объявленном как <div class='content'> Однако, когда я использую приведенный ниже код, я просто получаю ВСЕ ссылки на всей странице , Это не имеет для меня никакого смысла, так как я вызываю SelectNodes из выбранного ранее узла (который при просмотре в отладчике показывает только HTML из этого конкретного div). Таким образом, это похоже на то, что он возвращается к самому корневому узлу каждый раз, когда я вызываю SelectNodes. Код, который я использую, приведен ниже:

HtmlWeb hw = new HtmlWeb();
HtmlDocument doc = hw.Load(@"http://example.com");
HtmlNode node = doc.DocumentNode.SelectSingleNode("//div[@class='content']");
foreach(HtmlNode link in node.SelectNodes("//a[@href]"))
{
    Console.WriteLine(link.Value);
}

Это ожидаемое поведение? И если да, то как мне заставить его делать то, что я ожидаю?

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

Это будет работать:

node.SelectNodes("a[@href]")

Кроме того, вы можете сделать это в одном селекторе:

doc.DocumentNode.SelectSingleNode("//div[@class='content']//a[@href]")

Также обратите внимание, что link.Value не определено для HtmlNode , поэтому ваш код не компилируется.



Related

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