XPATH come estrarre un td alla volta da un tbody in HTML usando il pacchetto agility HTML

html html-agility-pack xpath

Domanda

Sto cercando di analizzare la tabella dall'URL (Google finance) di seguito

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

Sto cercando di estrarre solo i valori di chiusura nella colonna di chiusura . Ma quando provo con XPATH

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

Sto ottenendo tutti i nodi di avere attributo come classe e valore dell'attributo come rgt in un Node.innerText stesso.

Ho bisogno dei valori uno per uno, non tutti allo stesso tempo. Devo fare qualcosa di sciocco qui. Grazie.

L'XPath effettivo trovato usando Firebug è un seguito

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

Ma un po 'come dopo il tag del modulo ... HTMLagility pack sta restituendo un nodo null. Non avrei mai pensato che ci sarebbe voluto così tanto tempo per implementare.

Risposta accettata

Se stai usando Firebug o qualsiasi estensione di Firefox (come XPather ) per ottenere l' XPath degli elementi che devi analizzare, potresti dover rimuovere i tag tbody dall'XPath.

Dai un'occhiata alla seguente risposta qui su SO: Perché firebug aggiunge <tbody> a <table>?

Se utilizzi HtmlAgilityPack , l' XPath restituito da Firebug o da qualsiasi altro strumento correlato a Firefox potrebbe essere diverso, poiché la sorgente HTML che stai analizzando può essere diversa dalla sorgente HTML in Firefox .

A volte potrebbe essere utile aprire la stessa pagina in Internet Explorer 8 e utilizzare gli Strumenti per sviluppatori (F12) facendo lo stesso con Firebug o, in caso contrario, utilizzare un altro strumento come HAP Explorer che può essere scaricato dalla pagina HtmlAgilityPack


Risposta popolare

Ci sono molti modi per farlo. Ecco una soluzione, basata sul Data td (quello con la classe '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);
}



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é