Я должен был принять такое же решение в моей работе пару лет назад.
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;
}
Мы заметили ощутимые улучшения производительности после перехода на версию 6 с версии 4, хотя вы должны явно установить свойство NewParser
в документе, чтобы получить это преимущество, например ::
pDocument->setProperty(_bstr_t(L"NewParser"), VARIANT_TRUE);
При загрузке документов было еще несколько скачков, из-за соображений безопасности, удаленных DTD и так далее. Опять же, это было сделано через свойства документа, поэтому стоит поискать свойства ProhibitDTD
, UseInlineSchema
, AllowXsltScript
и ServerHTTPRequest
в MSDN, чтобы узнать, применимы ли они к вашему использованию.