似乎这是一个常见的问题,尽管我无法在SO上找到它。
我应该在我的应用程序中使用哪个版本的MSXML,更重要的是,我应该如何决定?
有MSXML3,4,5和6.
我最近在使用MSXML v4的calling-wcf-service-by-vbscript中发布了一些代码。 AnthonyWJones发布我不应该使用4,而是使用3或6,但可能是3.当然不是v5!
为什么呢?我想更多地了解选择在我的应用中使用的MSXML版本的标准。
加分问题:有没有人总结过不同版本的MSXML随时间的差异?
到目前为止摘要:
Using the right version of MSXML in Internet Explorer是the blog from Microsoft's xmlteam上的一个很好的条目。
答案 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中查找ProhibitDTD
,UseInlineSchema
,AllowXsltScript
和ServerHTTPRequest
属性以查看它们是否适用你的用法。
答案 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。