HtmlAgilityPack sélectionnant les childNodes non conformes aux attentes

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

Question

J'essaie d'utiliser la bibliothèque HtmlAgilityPack pour analyser des liens dans une page, mais je ne vois pas les résultats que j'attendrais des méthodes. Dans ce qui suit, j'ai un HtmlNodeCollection de liens. Pour chaque lien, je souhaite vérifier s'il existe un nœud d'image, puis analyser ses attributions, mais les méthodes SelectNodes et SelectSingleNode de linkNode semblent rechercher le document parent et non les nœuds childNodes de 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]");     
    }
}

Existe-t-il un autre moyen d'obtenir l'attribut alt de l'image childnode de linkNode s'il existe?

Réponse acceptée

Vous devez supprimer le préfixe de barre oblique vers suivante de "/ img [@alt]", car cela signifie que vous souhaitez commencer à la racine du document.

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

Réponse populaire

Avec une requête xpath, vous pouvez également utiliser "." pour indiquer que la recherche doit commencer au nœud actuel.

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


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow