XPATH cómo extraer un td a la vez de un cuerpo en HTML usando el paquete de agilidad HTML

html html-agility-pack xpath

Pregunta

Estoy tratando de analizar la tabla de la URL (Google Finance) a continuación

http://www.google.com/finance/historical?q=BOM:533278

Estoy intentando extraer solo los valores de cierre en la columna de cierre . Pero cuando intento con el XPATH

hd.DocumentNode.SelectSingleNode("//td[@class='rgt']")

Estoy obteniendo todos los nodos de tener atributo como clase y valor de atributo como rgt en un Node.innerText .

Necesito los valores uno por uno, no todos al mismo tiempo. Debo estar haciendo algo tonto aquí. Gracias.

La XPath real encontrada utilizando Firebug es una

/html/body/div/div/div[3]/div[2]/div/div[2]
     /div[2]/div/form/div[2]/table/tbody/tr[2]/td[5]

Pero de alguna manera, después de la etiqueta de formulario ... HTMLagility pack está devolviendo un nodo nulo. Nunca pensé que esto llevaría tanto tiempo en implementarse.

Respuesta aceptada

Si está utilizando Firebug o cualquier extensión de Firefox (como XPather ) para obtener el XPath de los elementos que necesita analizar, es posible que deba eliminar las etiquetas tbody del XPath.

Eche un vistazo a la siguiente respuesta aquí en SO: ¿Por qué firebug agrega <tbody> a <table>?

Si está utilizando HtmlAgilityPack , el XPath devuelto por Firebug o por cualquier otra herramienta relacionada con Firefox puede diferir, ya que la fuente HTML que está analizando puede ser diferente de la fuente HTML en Firefox .

Algunas veces puede ser útil para abrir la misma página en Internet Explorer 8 y usar las Herramientas del desarrollador (F12) para hacer lo mismo que está haciendo con Firebug, o si no, usar otra herramienta como HAP Explorer que se pueda descargar de la página HtmlAgilityPack


Respuesta popular

Hay muchas maneras de hacerlo. Aquí hay una solución, que se basa en los datos td (la que contiene la clase 'lm'):

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
... load the doc ...

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//td[@class='lm']/../td[5]"))
{
    Console.WriteLine("node=" + node.InnerText);
}


Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow