为 .Net XmlDocument 实现 GetByClassName

Posted

技术标签:

【中文标题】为 .Net XmlDocument 实现 GetByClassName【英文标题】:Implementing GetByClassName for a .Net XmlDocument 【发布时间】:2010-09-20 11:55:32 【问题描述】:

我正在使用 XmlDocument 来解析和操作 Xhtml 字符串,将一些节点转换为非 HTML 节点。

获取具有给定类名的所有节点列表的最佳方法是什么?可以用 XPath 完成吗?

【问题讨论】:

【参考方案1】:

有一个给定的类?如果它只是一个类,那么您应该能够执行类似 .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 不支持正则表达式? 不是本地的。在 xpath 中有一系列字符串函数可供您使用 - 但是,没有什么特别方便的。【参考方案2】:

是的,使用 XPath 很容易:

//*[@class='foo']

【讨论】:

谢谢,这是否考虑到一个元素可以有多个类名?

以上是关于为 .Net XmlDocument 实现 GetByClassName的主要内容,如果未能解决你的问题,请参考以下文章