Implementazione di GetByClassName per un .Net XocDocument
-
06-07-2019 - |
Domanda
Sto usando un XmlDocument per analizzare e manipolare una stringa XHTML, convertendo alcuni nodi in nodi non HTML.
Qual è il modo migliore per ottenere un elenco di tutti i nodi con un determinato nome di classe? Può essere fatto con XPath?
Soluzione
Con una determinata classe? Se è solo una classe, dovresti essere in grado di fare qualcosa come .SelectNodes (" // * [@ class = 'foo'] "). Se non è xhtml, vale la pena pacchetto di agilità HTML .
Al client, jQuery sarebbe una buona opzione e supporta nomi di classi compositi.
Se hai più nomi di classe su singoli elementi e devi gestirlo sul server, mi aspetto che potresti aver bisogno di trovare prima le classi candidate (" // * [@ class! = '']) e quindi passaci sopra facendo un Split ()
e controllando il nome della classe nei risultati; cioè separarlo manualmente.
In termini di LINQ, qualcosa del tipo:
var qry = from XmlElement el in d.SelectNodes("//*[@class!='']")
let classes = el.GetAttribute("class").Split(new[] {' '},
StringSplitOptions.RemoveEmptyEntries)
where classes.Contains("foo")
select el;
Altri suggerimenti
Sì, è facile con XPath:
//*[@class='foo']