这似乎是一个常见的问题,虽然我找不到它。
我应该在我的应用程序中使用哪个版本的MSXML,更重要的是,我应该如何决定呢?
有MSXML3,4,5和6。
我最近在调用-wcf-service-by-vbscript中发布了一些使用MSXML v4的代码。AnthonyWJones说我不应该使用4,而应该使用3或6,但可能使用3,当然不是v5!
为什么?我想知道更多关于选择在我的应用程序中使用的MSXML版本的标准。
额外的问题:是否有人总结了MSXML不同版本之间的差异?
迄今为止的摘要:
在中使用MSXML的正确版本是微软xmlteam的博客上的一个很好的条目。
发布于 2009-06-04 17:02:20
如果您需要在Win2k之前支持Windows版本,那么请使用MSXML3。否则,使用MSXML6。
MSXML4处于维护模式。
实际上,在MSXML5之外从未支持使用MSXML5。
请参见:
发布于 2009-06-04 17:10:31
几年前我在工作中不得不做出同样的决定。
版本6是最适合使用的MSDN状态,但是它们没有在SDK中提供合并模块,并且您不能像在版本4中那样在应用程序中分发它。版本4被版本6所取代,版本5专门用于MS Office。第3版仍然是旧机器上的目标版本。
最后,我采取了一种优雅的降级方法,尝试首先使用6,然后失败使用版本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;
}我们注意到在从version 4迁移到version 6之后,性能得到了可测量的改进,尽管您必须显式地在文档上设置NewParser属性以获得这种好处,例如:
pDocument->setProperty(_bstr_t(L"NewParser"), VARIANT_TRUE);由于安全性考虑、远程DTD等原因,在加载文档时还有几个环要跳过。同样,这是通过文档上的属性完成的,因此值得查找MSDN中的ProhibitDTD、UseInlineSchema、AllowXsltScript和ServerHTTPRequest属性,看看它们是否适用于您的使用。
发布于 2009-06-04 17:05:16
以下是所有版本的列表。对维基百科上的差异进行了一次体面的讨论。
https://stackoverflow.com/questions/951804
复制相似问题