49

似乎这将是一个常见问题,尽管我在 SO 上找不到它。

我应该在我的应用程序中使用哪个版本的 MSXML,更重要的是,我应该如何决定?

有 MSXML3、4、5 和 6。

我最近在call-wcf-service-by-vbscript中发布了一些使用 MSXML v4 的代码。AnthonyWJones 发布说我不应该使用 4,而是使用 3 或 6,但可能是 3。当然不是 v5!

为什么?我想了解更多关于选择要在我的应用程序中使用的 MSXML 版本的标准。

额外问题:是否有人总结了不同版本的 MSXML 之间的差异?


到目前为止的总结:

  • MSXML6
    应该是首选。于 2006 年发布,包括性能和合规性修复。如果可以,请使用它。很好。没有合并模块;要将 MSXML6 运行时与您的应用程序捆绑在一起,MS 建议打包 MSXML6 msi 文件。MSXML6 是 MSXML3/4 的升级版,但不会取代它们,因为它停止了一些功能。您可以在此处获取 MSI 。
  • MSXML3
    第二选择。部署最广泛的版本。最初于 2000 年 3 月发货。积极维护,没有新功能。当前受支持,如果您使用的是SP5(2005 年发布)或更高版本。SP7是最新的(也从 2005 年开始)。
  • MSXML5
    仅作为 MS-Office 的一部分发布。目前受 Microsoft 支持,但仅作为 Office 的一部分,不适用于构建应用程序。不要构建依赖于 MSXML5:Verboten 的应用程序。
  • MSXML4
    最初发货?目前处于“维护模式”。Microsoft 鼓励人们从 MSXML4 迁移到 MSXML6。当前支持,如果您使用的是 2003 年发布的 MSXML4SP2 或更高版本。请在此处下载 MSXML4SP2 。 可以重新分配

在 Internet Explorer 中使用正确版本的 MSXML是Microsoft xmlteam 博客上的一个很好的条目。

4

5 回答 5

25

如果您需要支持 Win2k 之前的 Windows 操作系统版本,请使用 MSXML3。否则,请使用 MSXML6。

MSXML4 处于维护模式。
MSXML5 从未真正支持在 MS-Office 之外使用。

看:

于 2009-06-04T17:02:20.467 回答
13

几年前,我不得不在工作中做出同样的决定。

MSDN 指出版本 6 是最适合使用的版本,但是它们没有在 SDK 中提供合并模块,并且您不能像使用版本 4 那样在应用程序中分发它。版本 4 已被版本 6 和版本 5 专门用于 MS Office。版本 3 仍然是旧机器上的目标版本。

我最终做的是采用优雅的降级方法并尝试首先使用 6,失败版本 4,然后失败使用版本 3(代码是 C++):

inline bool CXMLDocument::CreateXMLDOMFactory(void)
{
    wxMutexLocker lock(sm_mXMLDOMFactory);

    if(!sm_pXMLDOMFactory)
    {
        ::CoGetClassObject(CLSID_DOMDocument60, CLSCTX_ALL, 0, IID_IClassFactory, reinterpret_cast<void **>(&sm_pXMLDOMFactory));
        if(!sm_pXMLDOMFactory)
        {
            ::CoGetClassObject(CLSID_DOMDocument40, CLSCTX_ALL, 0, IID_IClassFactory, reinterpret_cast<void **>(&sm_pXMLDOMFactory));
            if(!sm_pXMLDOMFactory)
                ::CoGetClassObject(CLSID_DOMDocument30, CLSCTX_ALL, 0, IID_IClassFactory, reinterpret_cast<void **>(&sm_pXMLDOMFactory));
        }
    }

    return sm_pXMLDOMFactory != 0;
}

在从版本 4 迁移到版本 6 后,我们注意到性能得到了显着提升,尽管您必须NewParser在文档上显式设置属性才能获得此好处,例如:

pDocument->setProperty(_bstr_t(L"NewParser"), VARIANT_TRUE);

由于安全考虑、远程 DTD 等原因,在加载文档时还需要跳过更多的环节。同样,这是通过文档上的属性完成的,因此值得在 MSDN 中查找ProhibitDTD、和属性UseInlineSchema,看看它们是否适用于您的使用。AllowXsltScriptServerHTTPRequest

于 2009-06-04T17:10:31.393 回答
2

这是所有版本的列表Wikipedia上对差异进行了不错的讨论。

于 2009-06-04T17:05:16.347 回答
2

似乎 MSXML 5 是唯一能够对 XML 进行数字签名的版本。MS网站说即使MSXML 6也做不到,如果你需要这个功能,似乎MSXML 5是唯一的出路。

http://msdn.microsoft.com/en-us/library/ms761363(VS.85).aspx "此示例代码使用在 MSXML 5.0 中为 Microsoft Office 应用程序实现的功能。MXSML 6.0 不支持 XML 数字签名后来

于 2010-03-22T17:10:03.817 回答
0

我最近创建了一个 JS 库,它试图从最新版本优雅地降级到最旧版本。我发现大多数系统都很好地支持 MSXML 3.0。我曾想在可用时使用 v. 6.0,但它在某些 IE 8 安装上崩溃了。因此,我不得不更改我的代码以先尝试 v 3.0,然后再尝试 v 6.0,然后再尝试 v 2.0。

于 2009-06-04T17:04:59.637 回答