Реализация GetByClassName для .Net XmlDocument
-
06-07-2019 - |
Вопрос
Я использую XmlDocument для анализа и манипулирования строкой XHTML, преобразования некоторых узлов в узлы, отличные от HTML.
Каков наилучший способ получить список всех узлов с данным именем класса? Это можно сделать с помощью XPath?
Решение
С данным классом? Если это только один класс, то вы должны иметь возможность делать что-то вроде .SelectNodes (" // * [@ class = 'foo'] "). Если это не xhtml, то HTML Agility Pack стоит посмотреть.
На клиенте jQuery был бы хорошим вариантом - и поддерживает составные имена классов.
Если у вас есть несколько имен классов в отдельных элементах, и вам нужно обработать их на сервере, я ожидаю, что вам может понадобиться сначала найти классы-кандидаты (" // * [@ class! = '']), и затем зациклите их, выполнив Split ()
и проверив имя класса в результатах; то есть вытащить его вручную.
В терминах LINQ, что-то вроде:
var qry = from XmlElement el in d.SelectNodes("//*[@class!='']")
let classes = el.GetAttribute("class").Split(new[] {' '},
StringSplitOptions.RemoveEmptyEntries)
where classes.Contains("foo")
select el;
Другие советы
Да, с XPath это просто:
//*[@class='foo']