为 .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的主要内容,如果未能解决你的问题,请参考以下文章

从 XmlDocument 到 XmlReader .Net

XmlDocument 类正在删除格式、c#、.NET

c# .net 怎么将一个xml字符串 转换成一个xmlnode ,(不是xmldocument)

如何在 c# .net CF 3.5 中使用 XmlDocument 向 xml 添加属性

如何防止 .NET 的 XmlDocument 输出中出现空白 xmlns 属性?

如何在 .NET 中使用 XmlWriter 创建 XmlDocument?