2008-11-03 6 views
1

Я использую XmlDocument для синтаксического анализа и управления строкой XHTML, конвертируя некоторые узлы в не-HTML-узлы.Реализация GetByClassName для .Net XmlDocument

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

ответ

2

С данным классом? Если это только один класс, то вы должны иметь возможность сделать что-то вроде .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; 
+0

Я понимаю, что XPath не поддерживает регулярные выражения? – tpower 2008-11-03 14:18:14

+0

Не изначально. Существует ряд строковых функций, доступных вам в xpath - однако ничего, что было бы особенно удобно. – 2008-11-03 15:41:02

1

Да, это легко с помощью XPath:

//*[@class='foo']