XPath Expression no funciona en HtmlAgilityPack

c# html-agility-pack xpath

Pregunta

Sé que puede ser de mi noobness en XPath, pero déjame preguntarte para asegurarme, porque ya he buscado en Google lo suficiente.

Tengo un sitio web y quiero obtener los títulos de las noticias: www.farsnews.com (es persa)

Utilizando las extensiones FireBug y FireXpath en Firefox y, a mano, extraigo y pruebo varias expresiones Xpath que coinciden con los encabezados, como:

* html/body/div[2]/div[2]/div[2]/div[*]/div[2]/a/div[2]
* .//*[@class="topnewsinfotitle "]
* .//div[@class="topnewsinfotitle "]

También probé estos usando la extensión XPather y parecen funcionar bastante bien, pero cuando los pruebo ... ¡SelectNodes devuelve nulo!

¿Alguna pista o pista?

Aquí hay una parte del código:

listBox2.ResetText();

HtmlAgilityPack.HtmlWeb w = new HtmlAgilityPack.HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = w.Load("http://www.farsnews.com");
HtmlAgilityPack.HtmlNodeCollection nc = doc.DocumentNode.SelectNodes(".//div[@class=\"topnewsinfotitle \"]");

listBox2.Items.Add(nc.Count+" Items selected!");

foreach (HtmlAgilityPack.HtmlNode node in nc) {
            listBox2.Items.Add(node.InnerText);
        }

Gracias.

Respuesta popular

He probado tus expresiones. Y como lo menciona Dialecticus en un comentario, tiene un espacio final que no debería estar allí.

//div[@class='topnewsinfotitle ']/text()

Devuelve 'secuencia vacía', ver evaluación: http://xmltools.dk/EQA-ACA6

//div[@class='topnewsinfotitle']/text()

Devuelve una lista de sus titulares, consulte: http://xmltools.dk/EgA2APAj

Sin embargo, si puede haber otras clases, use esto ( http://xmltools.dk/EwA8AJAW ):

//div[contains(@class, 'topnewsinfotitle')]/text()

(Veo que es un problema de codificación en los enlaces que he proporcionado, sin embargo, no debería importar para el significado y para todas las expresiones XPath, puede eliminar /text() para obtener los nodos en lugar de solo el texto)

PERO, si es el propietario de este sitio, debe proporcionar los titulares con un XML (tal vez RSS o ATOM) o JSON que tenga un mejor rendimiento y, lo más importante, que sea más a prueba de balas.



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é