我应该使用哪个版本的MSXML?

时间:2009-06-04 16:56:17

标签: windows visual-c++ com scripting msxml

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

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

有MSXML3,4,5和6.

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

为什么呢?我想更多地了解选择在我的应用中使用的MSXML版本的标准。

加分问题:有没有人总结过不同版本的MSXML随时间的差异?


到目前为止摘要:

  • MSXML6
    应该是首选。于2006年发布,包括性能和合规性修复。如果可以,请使用此选项。很好。没有合并模块;将MSXML6运行时与您的应用MS suggests packaging the MSXML6 msi file捆绑在一起。 MSXML6是MSXML3 / 4的升级版,但不会替换它们,因为它会中断某些功能。您可以获得MSI here
  • MSXML3
    第二选择。部署最广泛的版本。最初于2000年3月发货。积极维护,没有新功能。目前支持,如果您在SP5(2005年发货)或更高版本。 SP7是最新的(也是2005年)。
  • MSXML5
    仅作为MS-Office的一部分发布。目前由Microsoft支持,但仅作为Office的一部分,而不是用于构建应用程序。不要构建依赖于MSXML5的应用程序:Verboten。
  • MSXML4
    原来发货?目前处于“维护模式”。微软鼓励人们将MSXML4转移到MSXML6。如果您使用的是2003年发布的MSXML4SP2或更高版本,则目前支持。下载MSXML4SP2 hereCan be redisributed

Using the right version of MSXML in Internet Explorerthe blog from Microsoft's xmlteam上的一个很好的条目。

5 个答案:

答案 0 :(得分:23)

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

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

答案 1 :(得分:12)

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

版本6的MSDN states是最佳使用版本,但它们不在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中查找ProhibitDTDUseInlineSchemaAllowXsltScriptServerHTTPRequest属性以查看它们是否适用你的用法。

答案 2 :(得分:2)

答案 3 :(得分:1)

似乎MSXML 5是唯一能够以数字方式签署XML的版本。 MS网站说,即使MSXML 6也不能这样做,如果你需要这个功能,似乎MSXML 5是唯一的出路。

http://msdn.microsoft.com/en-us/library/ms761363(VS.85).aspx“此示例代码使用MSXML 5.0 for Microsoft Office Applications中实现的功能。 MXSML 6.0及更高版本不支持XML数字签名

答案 4 :(得分:0)

我最近创建了一个JS库,试图从最新版本优化到最旧版本。我发现大多数系统都支持MSXML 3.0。我曾经想在可用的情况下使用v.6.0,但它在一些IE 8安装上破坏了。所以,我不得不改变我的代码,首先尝试v 3.0,然后是v 6.0,然后是v 2.0。