Реализация GetByClassName для .Net XmlDocument - PullRequest
1 голос
/ 03 ноября 2008

Я использую XmlDocument для анализа и манипулирования строкой XHTML, преобразования некоторых узлов в узлы, отличные от HTML.

Каков наилучший способ получить список всех узлов с данным именем класса? Можно ли это сделать с помощью XPath?

Ответы [ 2 ]

2 голосов
/ 03 ноября 2008

с данным классом? Если это всего лишь один класс, то вы должны иметь возможность делать что-то вроде .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;
1 голос
/ 03 ноября 2008

Да, с XPath это просто:

//*[@class='foo']
...