usar parser htmlagilitypack examples como agility c# .net asp.net xpath html-agility-pack

c# - parser - htmlagilitypack load url



HtmlAgilityPack seleccionando childNodes no como se esperaba (3)

Además, ten cuidado con el cheque nulo. SelectNodes devuelve null en lugar de colección en blanco.

HtmlNodeCollection linkNodes = htmldoc.DocumentNode.SelectNodes("//a[@href]"); **if(linkNodes!=null)** { foreach(HtmlNode linkNode in linkNodes) { string linkTitle = linkNode.GetAttributeValue("title", string.Empty); if (linkTitle == string.Empty) { **HtmlNode imageNode = linkNode.SelectSingleNode("img[@alt]");** } } }

Estoy intentando utilizar la biblioteca HtmlAgilityPack para analizar algunos enlaces en una página, pero no veo los resultados que esperaría de los métodos. A continuación, tengo una HtmlNodeCollection de enlaces. Para cada enlace, quiero verificar si hay un nodo de imagen y luego analizar sus attribures, pero los métodos SelectNodes y SelectSingleNode de linkNode parecen estar buscando en el documento padre, no en los childNodes de linkNode, ¿qué ofrece?

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 forma en que pueda obtener el atributo alt de la imagen childnode de linkNode, si existe?


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

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


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

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