为 .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
c# .net 怎么将一个xml字符串 转换成一个xmlnode ,(不是xmldocument)
如何在 c# .net CF 3.5 中使用 XmlDocument 向 xml 添加属性