HtmlAgilityPack childNodes nicht wie erwartet auswählen

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

Frage

Ich versuche, die HtmlAgilityPack-Bibliothek zu verwenden, um einige Links auf einer Seite zu analysieren, aber ich sehe nicht die Ergebnisse, die ich von den Methoden erwarten würde. Im Folgenden habe ich eine HtmlNodeCollection von Links. Für jeden Link möchte ich prüfen, ob es einen Image-Knoten gibt und dann seine Attribute analysieren, aber die SelectNodes- und SelectSingleNode-Methoden von linkNode suchen das übergeordnete Dokument und nicht die childNodes von linkNode, was gibt?

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]");     
    }
}

Gibt es eine andere Möglichkeit, das Alt-Attribut des Image-Childnode von LinkNode zu erhalten, wenn es existiert?

Akzeptierte Antwort

Sie sollten das Vorsilbe-Präfix aus "/ img [@alt]" entfernen, da es bedeutet, dass Sie am Anfang des Dokuments beginnen möchten.

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

Beliebte Antwort

Bei einer XPath-Abfrage können Sie auch "." um anzuzeigen, dass die Suche am aktuellen Knoten beginnen soll.

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


Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow