Wie bekomme ich alle Elemente aus HTML, die dasselbe Klassenattribut haben?

c# html html-agility-pack xpath

Frage

Ich entwickle eine asp.net-Anwendung in diesem ich benutze htmlagility dll, um alle <div> -Tags zu erhalten, das ist die gleiche Klasse Attribute.
Wie man alle Elemente, die dieselbe Klasse haben, von der ganzen HTML Seite bekommt,
Ich bekomme Top 1 Div, wer Klasse = 'Myclass' aber in,
Mein Fall möchte ich alle div-Tags, die Klasse 'myclass' haben.

var vardoc = web.Load("<any website url>"); 
var varmyclass = doc.DocumentNode.SelectSingleNode("//div[@class='myclass']"); 

Wenn ich die obige Methode verwende, dann bekomme ich den inneren HTML-Inhalt der 'myclass', aber in meinem HTML-Inhalt gibt es viele div-Tags, die die Klasse 'myclass' haben. Ich möchte alle <div> , die dieselbe Klasse mit HTMLagility oder anderen haben

Akzeptierte Antwort

Wählen Sie in diesem Fall keinen einzelnen Knoten.

Sie verwenden SelectSingleNode , das nur einen Knoten SelectSingleNode .

Verwenden SelectNodes stattdessen SelectNodes :

var varmyclass = doc.DocumentNode.SelectNodes("//div[@class='myclass']");

Beliebte Antwort

Zwei Probleme, das erste ist, dass Sie SelectNodes() stattdessen verwenden sollten, wie die anderen Antworten darauf hingewiesen haben, da Sie mehrere Knoten auswählen möchten.

Außerdem ist Ihr XPath ein wenig restriktiv. Es erhält nur div Elemente, die nur eine Klasse haben, myclass , aber nicht solche mit mehreren Klassen. Ich vermute, dass Sie diese auch einbeziehen wollen. Anstatt zu überprüfen, ob die Klasse gleich ist, prüfen Sie, ob sie die Klasse enthält.

var xpath = "//div[contains(@class,'myclass')]";
var query = doc.DocumentNode.SelectNodes(xpath);


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum