几年前,我不得不在工作中做出同样的决定。
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
if(!sm_pXMLDOMFactory)
{
::CoGetClassObject(CLSID_DOMDocument40, CLSCTX_ALL, 0, IID_IClassFactory, reinterpret_cast
if(!sm_pXMLDOMFactory)
::CoGetClassObject(CLSID_DOMDocument30, CLSCTX_ALL, 0, IID_IClassFactory, reinterpret_cast
}
}
return sm_pXMLDOMFactory != 0;
}
在从版本 4 迁移到版本 6 后,我们注意到性能得到了显着提升,尽管您必须NewParser在文档上显式设置属性才能获得此好处,例如:
pDocument->setProperty(_bstr_t(L"NewParser"), VARIANT_TRUE);
由于安全考虑、远程 DTD 等原因,在加载文档时还需要跳过更多的环节。同样,这是通过文档上的属性完成的,因此值得在 MSDN 中查找ProhibitDTD、和属性UseInlineSchema,看看它们是否适用于您的使用。AllowXsltScriptServerHTTPRequest