HtmlAgilityPack seleccionando childNodes no como se esperaba

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

Pregunta

Estoy intentando usar la biblioteca HtmlAgilityPack para analizar algunos enlaces en una página, pero no veo los resultados que esperaría de los métodos. En lo siguiente tengo un HtmlNodeCollection de enlaces. Para cada enlace, quiero comprobar si hay un nodo de imagen y luego analizar sus atributos, pero los métodos SelectNodes y SelectSingleNode de linkNode parecen buscar el documento principal, no los 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]");     
    }
}

¿Hay alguna otra manera de obtener el atributo alt del nodo de imagen de linkNode si existe?

Respuesta aceptada

Debe eliminar el prefijo forwardslash de "/ img [@alt]" ya que significa que desea comenzar en la raíz del documento.

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

Respuesta popular

Con una consulta xpath también puedes usar "." para indicar que la búsqueda debe comenzar en el nodo actual.

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


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué