HtmlAgilityPack выбор childNodes не так, как ожидалось

.net asp.net c# html-agility-pack xpath

Вопрос

Я пытаюсь использовать библиотеку HtmlAgilityPack для анализа некоторых ссылок на странице, но я не вижу результатов, которые я ожидал бы от методов. В следующем случае у меня есть HtmlNodeCollection ссылок. Для каждой ссылки я хочу проверить, есть ли узел изображения, а затем проанализировать его атрибуты, но методы SelectNodes и SelectSingleNode для linkNode, похоже, ищут родительский документ, а не дочерние узлы linkNode, что дает?

HtmlDocument htmldoc = new HtmlDocument();
htmldoc.LoadHtml(content);
HtmlNodeCollection linkNodes = htmldoc.DocumentNode.SelectNodes("//a[@href]");

foreach(HtmlNode linkNode in linkNodes)
{
    string linkTitle = linkNode.GetAttributeValue("title", string.Empty);
    if (linkTitle == string.Empty)
    {
        HtmlNode imageNode = linkNode.SelectSingleNode("/img[@alt]");     
    }
}

Есть ли какой-либо другой способ получить атрибут alt для образа childdode linkNode, если он существует?

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

Вы должны удалить префикс forwardslash из «/ img [@alt]», поскольку это означает, что вы хотите начать с корня документа.

HtmlNode imageNode = linkNode.SelectSingleNode("img[@alt]");

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

С помощью запроса xpath вы также можете использовать «.». чтобы указать, что поиск должен начинаться с текущего узла.

HtmlNode imageNode = linkNode.SelectSingleNode(".//img[@alt]");


Related

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