Implementieren von GetByClassName für ein .Net XmlDocument

Ich verwende ein XmlDocument, um eine XHTML-Zeichenfolge zu analysieren und zu bearbeiten und einige Knoten in Nicht-HTML-Knoten zu konvertieren.

Was ist der beste Weg, um eine Liste aller Knoten mit einem bestimmten Klassennamen zu erhalten? Kann dies mit XPath geschehen?

Antwort auf "Implementieren von GetByClassName für ein .Net XmlDocument " 2 von antworten

Mit einer bestimmten Klasse? Wenn es nur die eine Klasse ist, dann sollten Sie in der Lage sein, so etwas wie zu tun. SelectNodes(""**[@class='foo']"). Wenn es nicht xhtml ist, dann ist das HTML Agility Pack is worth looking at. einen Blick wert.

Beim Client wäre jQuery eine gute Option - und unterstützt zusammengesetzte Klassennamen.

Wenn Sie mehrere Klassennamen auf einzelnen Elementen haben und sie auf dem Server behandeln müssen, erwarte ich, dass Sie die Kandidatenklassen zuerst finden müssen ("**[@class!='']), und dann eine Schleife über sie führen, indem Sie ein Split() and checking for the class-name in the results; i.e. pull it apart manually. und die Überprüfung auf den Klassennamen in den Ergebnissen tun; d.h. es manuell auseinanderziehen.

In LINQ-Begriffen, so etwas wie:

        var qry = from XmlElement el in d.SelectNodes("//*[@class!='']")
                  let classes = el.GetAttribute("class").Split(new[] {' '},
                          StringSplitOptions.RemoveEmptyEntries)
                  where classes.Contains("foo")
                  select el;

Ja, es ist einfach mit XPath:

//*[@class='foo']