XPATH-Abfrage, HtmlAgilityPack und Extrahieren von Text

c# html html-agility-pack xpath

Frage

Ich hatte versucht, Links aus einer Klasse namens "tim_new" zu extrahieren. Ich habe auch eine Lösung bekommen.

Sowohl die Lösung, das Snippet als auch die notwendigen Informationen sind hier angegeben

Die genannte XPATH-Abfrage lautete "//a[@class='tim_new'] , meine Frage ist, wie diese Abfrage zwischen der ersten Zeile des Snippets (im obigen Link und der zweiten Zeile des Snippets angegeben) unterscheidet.

Genauer gesagt, was ist die wörtliche Übersetzung (in Englisch) dieser XPATH-Abfrage.


Außerdem möchte ich ein paar Codezeilen schreiben, um den gegen NSE: geschriebenen Text zu extrahieren NSE:

<div class="FL gL_12 PL10 PT15">BSE: 523395 &nbsp;&nbsp;|&nbsp;&nbsp; NSE: 3MINDIA &nbsp;&nbsp;|&nbsp;&nbsp; ISIN: INE470A01017</div>

Würde mich freuen, die notwendige Auswahlabfrage zu bilden.

Mein Code wird geschrieben als:

IEnumerable<string> NSECODE = doc.DocumentNode.SelectSingleNode("//div[@NSE:]");

Aber das sieht nicht richtig aus. Würde mich über Hilfe freuen.

Beliebte Antwort

Der XPath in der ersten Auswahl liest "Wählen Sie alle Dokumentelemente aus, die ein Attribut namens class mit einem Wert von tim_new haben". Das Zeug in Klammern ist nicht das, was Sie zurückgeben, es sind die Kriterien, die Sie auf die Suche anwenden.

Ich habe nicht das HTML Agility-Paket, aber wenn Sie versuchen, die divs, die "NSE:" als Text haben, abzufragen, sollte Ihr XPath für die zweite Abfrage einfach "// div" sein, dann sollten Sie filtern mit LINQ.

Etwas wie

var nodes = 
    doc.DocumentNode.SelectNodes("//div[text()]").Where(a => a.InnerText.IndexOf("NSE:") > -1);

Also, in Englisch, "Gib alle div-Elemente, die sofort Text enthalten, an LINQ zurück, und überprüfe dann, ob der innere Textwert NSE enthält:". Ich bin mir nicht sicher, ob die Syntax perfekt ist, aber das ist die Idee.

Der XPath "// div [@NSE:]" würde alle divs zurückgeben, die den Namen "NSE:" haben und als Attribut vergeben, was sowieso illegal wäre, weil ":" in einem Attributnamen nicht erlaubt ist. Sie suchen nach dem Text des Elements, nicht nach einem seiner Attribute.

Ich hoffe, das hilft.'

Hinweis: Wenn Sie geschachtelte divs haben, die beide Text enthalten, wie in <div>NSE: some text<div>NSE: more text</div></div> Sie doppelte Ergebnisse.



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