升级到MSXML 6.0

由于历史原因,MSXML有许多版本共存,比如3.0、4.0、5.0和6.0。让我们的客户把他们的应用程序移植到MSXML 6.0上去是我们的最终目标。

虽然我们希望今天每个人都在使用MSXML 6.0,但仍然清醒地意识到迁移需要相当的时间。所以我们将继续在MSXML 3.0上投入资源以支持现有的应用程序以及满足那些需要零发布需求。虽然MSXML 3.0并不具有MSXML6的新特性,不过MSXML 3.0仍然不失为一个稳定而强健的XML平台。MSXML 3.0已经随着Win2000 SP4以及以上的操作系统一起发布,对于应用程序而言可以说无需考虑发布的问题。

MSXML 4.0是MSXML 6.0的前身,不过并不曾随着操作系统发布。虽然我们刚刚发布了MSXML 4.0 SP3,但是就W3C标准以及与System.Xml的兼容性而言,MSXML 6.0是一个巨大的进步。此外,MSXML 6.0还提供64位版本。目前,我们主要在MSXML 6.0和MSXML 3.0上投入精力,所以我们希望用户尽可能迁移到MSXML 6.0,或者根据需要迁移到MSXML 3.0。

最后,如果不是针对Microsoft Office 2003或者Microsoft Office 2007编写程序却使用MSXML 5.0的开发者,应该立即迁移到MSXML 6.0。

摘要

MSXML 6.0是适用于COM和脚本语言环境中的微软XML产品线中的最新版本。本文主要涉及了MSXML 6.0 的安装和应用升级,所支持的操作系统以及其相对于MSXML3和MSXML4的变化。

本文所涉及到的MSXML 6.0的主要变化有以下方面:

  • MSXML 6.0 引入一系列安全方面的改变,默认关闭了安全敏感的特性。
  • MSXML 6.0 改进了对W3C XSD 1.0 标准的支持,并且提高了与.Net Framework 2.0 中System.Xml的兼容性。
  • MSXML 6.0 抛弃了若干遗留在MSXML 3.0 和 MSXML 4.0中的特性。
  • MSXML 6.0 不再支持通过MSM或CAB方式部属。MSXML 6.0已经是Vista和Windows XP SP3操作系统的一部分,对Vista以下系统只支持MSI方式安装。

可以在https://msdn2.microsoft.com/en-us/library/ms753751.aspx找到关于MSXML 6.0的更新信息。

安装和升级

MSXML 6.0 随着Vista和Windows XP SP3发布,对其他低版本操作系统,可以从这里下载,然后及时运行Windows Update以便升级到最新版本。安装成功后,会增加以下两个文件:

  • %SYSDIR%\msxml6.dll
  • %SYSDIR%\msxml6r.dll

要将一个应用程序升级为使用MSXML 6.0的程序,所有对MSXML对象的引用必须修改为使用MSXML 6.0指定版本的ProgIDs,例如:MSXML2.DOMDocument.6.0。

MSXML 6.0 支持以下操作系统:

  • Windows 2000
  • Windows XP
  • Windows 2003
  • Windows Vista

MSXML 6.0的技术支持将根据https://support.microsoft.com/default.aspx?pr=lifesupsps#Windows 所列的Windows Service Packs支持策略进行。

安全迁移——理解“默认关闭”

在MSXML 6.0 中,若干安全敏感的特性默认被设置为关闭状态。当升级的时候,这些特性可能需要通过设置打开。但请注意,当从不信任的或未授权的客户端解析数据时,请务必谨慎。可以在https://msdn2.microsoft.com/en-us/library/ms754611.aspx找到更多的安全注意事项。

改进与W3C XSD 1.0一致性以及与System.Xml 2.0兼容性:XmlSchemaCache的变化

为了改进与W3C标准的一致性以及与其他schema的兼容性,MSXML 6.0在XmlSchemaCache中对XSD schema编译和校验模型引入了一系列的变化。无论文档是通过DOMDocument还是SAXXMLReader来校验,这些变化都适用。

XmlSchemaCache既被IXMLDOMDocument2接口的schemas和namespaces属性所使用,也被做为一个属性,由ISAXXMLReader.putProperty所支持。

IXMLDOMSchemaCollection/XMLSchemaCache对象是线程自由的,可以被同时用于多个文档。发送到schema集合的XML schema文档会被克隆,XML schema文档仍然可写。在XML schema文件装入SchemaCache后,任何对XML schema文件的修改都不会反应到它的克隆镜像上。一个schema缓存可以被添加到多个schema集合中去。

MSDN中关于这个主题的文档在https://msdn2.microsoft.com/en-us/library/ms764692.aspx

被废弃的特性和类

  • XDR Schema不能在MSXML 6.0中继续使用。可以用XSD.EXE将XDR Schema转换为XSD格式。XSD.EXE跟随Visual Studio .NET 1.0 和1.1一起安装。
  • MSXML 6.0不支持DSO(MSXML2.DSOControl.6.0)。这个特性很少有用户使用。

总之,让我们的客户把他们的应用程序移植到MSXML 6.0上去是我们的最终目标。如果您在迁移过程中遇到任何问题,请直接留言或者在MSDN论坛上提问。

英文原文可以在这里找到。

MSXML团队