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

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

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(&sm_pXMLDOMFactory));

if(!sm_pXMLDOMFactory)

{

::CoGetClassObject(CLSID_DOMDocument40, CLSCTX_ALL, 0, IID_IClassFactory, reinterpret_cast(&sm_pXMLDOMFactory));

if(!sm_pXMLDOMFactory)

::CoGetClassObject(CLSID_DOMDocument30, CLSCTX_ALL, 0, IID_IClassFactory, reinterpret_cast(&sm_pXMLDOMFactory));

}

}

return sm_pXMLDOMFactory != 0;

}

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

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

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

Copyright © 2022 中国足球世界杯_90年世界杯 - doulol.com All Rights Reserved.