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

Che*_*eso 47 windows com scripting msxml visual-c++

这似乎是一个常见的问题,虽然我无法在SO上找到它.

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

有MSXML3,4,5和6.

我最近在使用MSXML v4的call-wcf-service-by-vbscript中发布了一些代码.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
    最初发货?目前处于"维护模式".微软鼓励人们将MSXML4转移到MSXML6.如果您使用的是2003年发布的MSXML4SP2或更高版本,则目前支持.请在此处下载MSXML4SP2 . 可以重新分发.

在Internet Explorer中使用正确版本的MSXML微软xmlteam在博客一个很好的条目.

Sho*_*og9 24

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

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

看到:


Phi*_*oth 12

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

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;
}
Run Code Online (Sandbox Code Playgroud)

从版本4迁移到版本6后,我们注意到了可测量的性能改进,尽管您必须NewParser在文档上显式设置属性才能获得此优势,例如:

pDocument->setProperty(_bstr_t(L"NewParser"), VARIANT_TRUE);
Run Code Online (Sandbox Code Playgroud)

出于安全考虑,远程DTD等原因,在加载文档时还需要更多的环节.再次,这是通过在文档属性来完成,所以这是值得仰视ProhibitDTD,UseInlineSchema,AllowXsltScriptServerHTTPRequest在MSDN属性,看看它们是否适用于您的使用.

  • 按版本号向后工作通常是个坏主意.如果MSXML6不可用,MSXML3通常是最好的后备.这取自官方Microsoft文档:http://msdn.microsoft.com/en-us/data/bb291077.aspx (3认同)