Какую версию MSXML мне следует использовать?

Похоже, это будет частый вопрос, хотя я не смог найти его на 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 предлагает упаковать MSXML6 msi-файл. 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 - хорошая запись в блоге Microsoft xmlteam.


person Cheeso    schedule 04.06.2009    source источник


Ответы (5)


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

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

Видеть:

person Shog9    schedule 04.06.2009
comment
Так что правильный ответ для меня, учитывая, что я ничего не развертываю на Win98 или даже на win2000, - это MSXML6. - person Cheeso; 04.06.2009
comment
Обратите внимание, что если вы используете MSXML6 в 64-разрядной версии Windows 8.1, вам может потребоваться указать номер версии в вашем коде (я этого не делал, и он выдавал неопределенные ссылочные ошибки), например: Dim XMLHttpReq As MSXML2.XMLHTTP60 вместо Dim XMLHttpReq As MSXML2.XMLHTTP. Если вы передаете параметры, используйте XMLHttpReq As XMLHTTP60 вместо XMLHttpReq As XMLHTTP. - person thdoan; 28.12.2015
comment
Прошло много времени с тех пор, как я работал с этим ... Но IIRC, MSXML2.XMLHTTP никогда не указывал на MSXML6 - вы получите более старую версию (вероятно, 3). Поскольку в 6 было много критических изменений, вам нужно было явно запросить его (так как тогда вы, вероятно, должны были бы протестировать свой код перед отправкой). - person Shog9; 29.12.2015

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

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

person Phil Booth    schedule 04.06.2009
comment
Как правило, работать в обратном направлении по номерам версий - плохая идея. Если MSXML6 недоступен, лучше всего использовать MSXML3. Это было взято из официального документа Microsoft: msdn.microsoft.com/en-us/ data / bb291077.aspx - person Rotem Varon; 11.11.2014

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

person JP Alioto    schedule 04.06.2009

Кажется, что 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 и более поздних версиях "

person WarmBooter    schedule 22.03.2010

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

person Cerebrus    schedule 04.06.2009