本文将 LINQ to XML 与以下 XML 技术进行比较: XmlReaderXSLT、MSXML 和 XmlLite。 此信息可以帮助你确定要使用的技术。
有关 LINQ to XML 与文档对象模型(DOM)的比较,请参阅 LINQ to XML 与 DOM。
LINQ to XML 与 XmlReader
XmlReader 是一个快速、仅向前的非缓存分析程序。
LINQ to XML 是基于 XmlReader 实现的,它们紧密集成。 但是,也可以直接使用 XmlReader 。
例如,假设要构建一个 Web 服务,该服务每秒将分析数百个 XML 文档,并且文档具有相同的结构,这意味着只需编写代码的一个实现来分析 XML。 在这种情况下,你可能想要直接使用 XmlReader 。
相比之下,如果要构建一个分析许多较小的 XML 文档的系统,并且每个文档都是不同的,则你需要利用 LINQ to XML 提供的工作效率改进。
LINQ to XML 与 XSLT
LINQ to XML 和 XSLT 都提供广泛的 XML 文档转换功能。 XSLT 是基于规则的声明性方法。 高级 XSLT 程序员以强调无状态方法的功能编程样式编写 XSLT。 可以使用没有副作用实现的纯函数编写转换。 对于许多开发人员来说,这种基于规则或功能的方法不熟悉,学习可能非常困难和耗时。
XSLT 可以是一个生产系统,可生成高性能应用程序。 例如,一些大型 Web 公司使用 XSLT 作为从不同类型的数据存储中提取的 XML 生成的 HTML 的方法。 托管的 XSLT 引擎将 XSLT 编译为公共语言运行时 (CLR) 代码,并在某些情况下的性能比本机 XSLT 引擎更好。
但是,XSLT 不会利用许多开发人员拥有的 C# 和 Visual Basic 知识。 它要求开发人员以不同的复杂编程语言编写代码。 使用 C# (或 Visual Basic)和 XSLT 等两个非集成开发系统会导致难以开发和维护的软件系统。
在熟悉使用 LINQ to XML 查询表达式后,LINQ to XML 转换是一种易于使用的强大技术。 基本上,通过使用功能构造、从各种源拉取数据、动态构造 XElement 对象并将整个结构组合到新的 XML 树中来形成 XML 文档。 转换可以生成全新的文档。 在 LINQ to XML 中构造转换相对简单直观,生成的代码是可读的。 这样可降低开发和维护成本。
LINQ to XML 不打算替换 XSLT。 XSLT 仍然是复杂且以文档为中心的 XML 转换的首选工具,尤其是在文档结构未明确定义时。
XSLT 的优势是成为万维网联盟(W3C)标准。 如果要求仅使用标准技术,则 XSLT 可能更合适。
XSLT 是 XML,这就是为什么它可以以编程方式进行操作。
LINQ to XML 与 MSXML
MSXML 是 Microsoft Windows 附带的基于 COM 的 XML 处理技术。 MSXML 提供 DOM 的本机实现,支持 XPath 和 XSLT。 它还包含基于事件的 SAX2 非缓存分析程序。
默认情况下,MSXML 性能良好,在大多数情况下都是安全的,可以在浏览器中访问,以便在 AJAX 样式应用程序中执行客户端 XML 处理。 MSXML 可用于支持 COM 的任何编程语言,包括 C++、JavaScript 和 Visual Basic 6.0。
不建议在基于 CLR 的托管代码中使用 MSXML。
LINQ to XML 与 XmlLite
XmlLite 是一种非缓存的、仅向前的拉式解析器。 开发人员主要将 XmlLite 与C++配合使用。 不建议开发人员将 XmlLite 与托管代码一起使用。
XmlLite 的主要优点是,它是在大多数方案中安全的轻型快速 XML 分析器。 它可能受到的威胁比较少。 如果必须分析不受信任的文档,并且想要防范拒绝服务或泄露数据等攻击,XmlLite 可能是一个很好的选择。
XmlLite 未与 Language-Integrated 查询(LINQ)集成。 它不会产生程序员工作效率改进,这些改进是 LINQ 背后的激励力量。