HtmlAgilityPack selezionando childNodes non come previsto

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

Domanda

Sto tentando di utilizzare la libreria HtmlAgilityPack per analizzare alcuni collegamenti in una pagina, ma non vedo i risultati che mi aspetterei dai metodi. Di seguito ho un HtmlNodeCollection di link. Per ogni collegamento voglio verificare se esiste un nodo immagine e quindi analizzare le sue attribuzioni ma i metodi SelectNodes e SelectSingleNode di linkNode sembrano cercare nel documento principale non i childNodes di linkNode che cosa fornisce?

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

C'è un altro modo in cui posso ottenere l'attributo alt dell'immagine childnode di linkNode se esiste?

Risposta accettata

Dovresti rimuovere il prefisso forwardslash da "/ img [@alt]" poiché significa che vuoi iniziare alla radice del documento.

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

Risposta popolare

Con una query xpath puoi anche usare "." per indicare che la ricerca dovrebbe iniziare dal nodo corrente.

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


Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché