Какую версию MSXML я должен использовать? - PullRequest
45 голосов
/ 04 июня 2009

Похоже, это был бы общий вопрос, хотя я не мог найти его на SO.

Какую версию MSXML я должен использовать в своих приложениях, и, что более важно, как мне решить?

Есть MSXML3, 4, 5 и 6.

Недавно я опубликовал некоторый код в call-wcf-service-by-vbscript , который использовал MSXML v4. AnthonyWJones объявил, что я не должен использовать 4, а вместо 3 или 6, но, вероятно, 3. Конечно, не v5!

Почему? Я хотел бы узнать больше о критериях выбора версии MSXML для использования в моих приложениях.

Бонусный вопрос : Есть ли у кого-нибудь сводка различий между различными версиями MSXML с течением времени?


Резюме на данный момент:

  • MSXML6
    Должен быть первый выбор. был выпущен в 2006 году и включает исправления перфорации и соответствия. Используйте это, если можете. Хорошо. Здесь нет модулей слияния; Чтобы связать среду выполнения MSXML6 с вашим приложением, MS предлагает упаковать MSI-файл MSXML6 . MSXML6 является обновлением по сравнению с MSXML3 / 4, но не заменяет их, поскольку некоторые функции отключены. Вы можете получить MSI здесь .
  • MSXML3
    Вторая возможность. Наиболее широко распространенная версия. Первоначально поставлено в марте 2000 года. Активно поддерживается, никаких новых функций. В настоящее время поддерживается, если вы используете SP5 (поставляется в 2005 году) или более поздней версии. SP7 является текущим (также с 2005 года).
  • MSXML5
    был выпущен только в составе MS-Office. В настоящее время поддерживается Microsoft, но только как часть Office, а не для создания приложений. Не создавайте приложения, которые зависят от MSXML5: Verboten.
  • MSXML4
    первоначально отправлен? В данный момент в "режиме обслуживания". Microsoft поощряет людей переходить с MSXML4 на MSXML6. В настоящее время поддерживается, если вы используете MSXML4SP2 или более позднюю версию, поставленную в 2003 году. Загрузите MSXML4SP2 здесь . Может быть перераспределен .

Использование правильной версии MSXML в Internet Explorer - хорошая запись в блоге от xmlteam от Microsoft .

Ответы [ 5 ]

23 голосов
/ 04 июня 2009

Если вам нужно поддерживать версии ОС Windows до Win2k, используйте MSXML3. В противном случае используйте MSXML6.

MSXML4 находится в режиме обслуживания.
MSXML5 фактически никогда не поддерживался для использования за пределами MS-Office.

См:

12 голосов
/ 04 июня 2009

Я должен был принять такое же решение в моей работе пару лет назад.

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, чтобы узнать, применимы ли они к вашему использованию.

2 голосов
/ 04 июня 2009

Вот список всех версий . Приличное обсуждение различий в Википедии .

1 голос
/ 22 марта 2010

Похоже, что MSXML 5 является единственной версией, которая может подписывать цифровой XML. Сайт MS говорит, что даже MSXML 6 не может этого сделать, поэтому, если вам нужна эта функция, кажется, что MSXML 5 - единственный путь.

http://msdn.microsoft.com/en-us/library/ms761363(VS.85).aspx "В этом примере кода используются функции, реализованные в MSXML 5.0 для приложений Microsoft Office. Цифровые подписи XML не поддерживаются в MXSML 6.0 и более поздних версиях "

0 голосов
/ 04 июня 2009

Я недавно создал библиотеку JS, которая пыталась изящно перейти с последней версии на самую старую. Я обнаружил, что MSXML 3.0 очень хорошо поддерживается на большинстве систем. Я хотел использовать v. 6.0, когда он был доступен, но он не работал на некоторых установках IE 8. Поэтому мне пришлось изменить код, чтобы сначала попробовать версию 3.0, затем версию 6.0, а затем версию 2.0.

...