为啥 XNode 在 System.XML.Linq 命名空间而不是 System.XML?

Posted

技术标签:

【中文标题】为啥 XNode 在 System.XML.Linq 命名空间而不是 System.XML?【英文标题】:Why is XNode in the System.XML.Linq namespace and not System.XML?为什么 XNode 在 System.XML.Linq 命名空间而不是 System.XML? 【发布时间】:2015-11-19 04:28:57 【问题描述】:

我正在编写一些涉及 XML 比较和使用 XNode 的代码。

XNode(和其他 XObject)似乎只是用于读取/操作 XML。

为什么在 Linq 命名空间下?

【问题讨论】:

我认为 MS 应该对此负责...... 【参考方案1】:

因为 X* 系列类是 .NET 3.5 引入的 Linq to XML 的一部分,而 System.Xml 中的 Xml* 系列类是框架中的原始 XML 解析套件。

每个命名空间中的类通常是不兼容的,并且使用不同的模式来遍历 XML。如果您希望使用其中一种,通常建议使用较新的框架。

【讨论】:

【参考方案2】:

MS 写道:

System.Xml 命名空间提供基于标准的支持 处理 XML。

来源:https://msdn.microsoft.com/en-us/library/system.xml%28v=vs.110%29.aspx

System.Xml.Linq 命名空间包含 LINQ to XML 的类。 LINQ to XML 是一个内存中的 XML 编程接口,使您能够 高效、轻松地修改 XML 文档。 使用 LINQ to XML,您可以:

列表项

从文件或流中加载 XML。

将 XML 序列化为文件或流。

使用函数式构造从头开始创建 XML 树。

使用 LINQ 查询查询 XML 树。

操作内存中的 XML 树。

使用 XSD 验证 XML 树。

结合使用这些功能将 XML 树从一种形状转换为另一种形状。

来源:https://msdn.microsoft.com/en-us/library/system.xml.linq%28v=vs.110%29.aspx

所以,XNode 属于 System.XML.Linq 命名空间,因为代表 XML 树中节点(元素、注释、文档类型、处理指令或文本节点)的抽象概念。

【讨论】:

"XNode 属于 System.XML.Linq 命名空间,因为它表示 XML 树中节点(元素、注释、文档类型、处理指令或文本节点)的抽象概念。"这和 Linq 有什么关系? 这个粗体摘要最好取自命名空间文档,而不是 XNode 文档,例如XNode 作为 LINQ to XML 的一部分实现,以启用 Linq 查询:“System.Xml.Linq 命名空间包含 LINQ to XML 的类”。

以上是关于为啥 XNode 在 System.XML.Linq 命名空间而不是 System.XML?的主要内容,如果未能解决你的问题,请参考以下文章

Unity图形节点插件xNode简单使用说明

C# XNode 添加一个 NameSpace

从 XNode 中读取值

将 XmlNode 转换为 XNode?

Unity xNode节点插件入门使用介绍1

为什么Powershell类属性在其方法中需要此属性?