XPATH, wie man ein td zu einer Zeit von einem tbody in HTML extrahiert, das HTML agility pack verwendet

html html-agility-pack xpath

Frage

Ich versuche, die Tabelle von der URL (Google Finanzen) unten zu analysieren

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

Ich versuche nur die nahen Werte in der nahen Spalte zu extrahieren. Aber wenn ich es mit dem XPATH versuche

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

Ich erhalte alle Knoten, die in einem Node.innerText selbst als Klasse und Wert des Attributs als rgt angegeben haben .

Ich brauche die Werte nacheinander, nicht alle gleichzeitig. Ich muss hier etwas Dummes machen. Vielen Dank.

Der tatsächliche XPath, der mit Firebug gefunden wurde, ist wie folgt

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

Aber einige, wie nach dem Formular-Tag ... HTMLagility-Paket gibt Null-Knoten zurück. Hätte nie gedacht, dass dies so lange dauern würde.

Akzeptierte Antwort

Wenn Sie Firebug oder eine Firefox- Erweiterung (wie XPather ) verwenden, um den XPath der Elemente zu erhalten, die Sie analysieren müssen, müssen Sie möglicherweise die tbody Tags aus dem XPath entfernen.

Sehen Sie sich die folgende Antwort hier auf SO an: Warum fügt Firebug <tbody> zu <table> hinzu?

Wenn Sie HtmlAgilityPack verwenden , kann der XPath , der von Firebug oder einem anderen mit Firefox verwandten Tool zurückgegeben wird, abweichen, da sich die HTML-Quelle, die Sie analysieren, von der HTML-Quelle in Firefox unterscheiden kann .

Manchmal kann es nützlich sein, dieselbe Seite in Internet Explorer 8 zu öffnen und mit den Entwicklertools (F12) das gleiche wie mit Firebug zu tun, oder falls nicht, ein anderes Tool wie HAP Explorer zu verwenden , das von der HtmlAgilityPack-Seite heruntergeladen werden kann


Beliebte Antwort

Es gibt viele Möglichkeiten, dies zu tun. Hier ist eine Lösung, die auf dem Data td (dem mit der 'lm' Klasse) basiert:

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

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow