Msxml parser что это за программа и нужна ли она

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

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

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

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

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

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

резюме до сих пор:

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

Бесплатный парсинг сайтов за 5 минут | allrival.com — сервис мониторинга цен конкурентов

автор: Community

5 ответов

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

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

посмотреть:

  • список версий Microsoft XML Parser (MSXML)
  • использование правильной версии MSXML в Internet Explorer

автор: Shog9

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

на государства-узел 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; >

мы заметили измеримые улучшения производительности после перехода на версию 6 из версии 4, хотя вы должны явно установить NewParser свойство документа, чтобы получить это преимущество, например:

Понятие SRAM, DRAM, ROM, PROM, EPROM, EEPROM, …


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

там были также несколько обручи, чтобы прыгать через При загрузке документов из-за соображений безопасности, удаленное DTDs и так далее. Опять же, это было сделано через свойства документа, поэтому стоит посмотреть ProhibitDTD , UseInlineSchema , AllowXsltScript и ServerHTTPRequest свойства в MSDN, чтобы увидеть, применяются ли они к вашему использованию.

Источник: askdev.ru

Какую версию 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 здесь. Можно распространять.

Cheeso 4 Июн 2009 в 20:56

5 ответов

Лучший ответ

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

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

Видеть:

  • Список версий Microsoft XML Parser (MSXML)
  • Использование правильной версии MSXML в Internet Explorer

Community 20 Июн 2020 в 12:12

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

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; >

Мы заметили заметные улучшения производительности после перехода на версию 6 с версии 4, хотя вам нужно явно установить свойство NewParser в документе, чтобы получить это преимущество, например:

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

Также было еще несколько проблем, которые нужно было преодолеть при загрузке документов из соображений безопасности, удаленных DTD и так далее. Опять же, это было сделано с помощью свойств в документе, поэтому стоит поискать свойства ProhibitDTD , UseInlineSchema , AllowXsltScript и ServerHTTPRequest в MSDN, чтобы узнать, применимы ли они к вашему использованию.

Источник: question-it.com

diman_novik_ru

Притащила одна бухгалтерша ноутбук с установленной на нём программой 1С версии 7.7. В этой старой 1С-ке не формировались бухгалтерские отчёты, при этом 1С-ка выдавала следующее сообщение об ошибке: «Компонента V7Plus : Ошибка инициализации XML Parser».

Перед этим она мне звонила, спрашивала, не знаю ли я как решить эту проблему, и я не знал, но был готов попробовать. Однако её шеф решил позвать 1С-ников. По словам бухгалтерши к ней поочереди приходили трое специалистов по 1С, но с мёртвой точки дело не сдвинулось. Пришла моя очередь :).

Я с такой проблемой никогда не сталкивался, и начал с найденных в интернете рекомендаций переустановить msxml-парсеры. Не знаю, почему, но везде, где рассматривалась эта проблема (из тех мест, что я нашёл), «знающие» люди говорили, что седьмая 1С-ка работает только с третьей версией xml-парсера, поэтому они рекомендовали удалить четвёртый и более новые, а третий переустановить. Кое где предлагали переустановить и третий и четвёртый парсер. Я это, конечно, всё попробовал, но это не помогло. По следам в системе я обнаружил, что это всё перепробовал не только я.

После этого я попробовал зарегистрировать в системе dll-ку V7Plus.dll, которая идёт с 1С-кой (на одном из форумов какой-то товарищ предлагал это сделать, сказав, что «иногда регистрация соскакивает»). «Ну давай, попробуем», — подумал я, и набрал команду «regsvr32 v7plus.dll». «Хрен тебе» — сказал мне 64-ёх битный Windows-7. Точнее, конечно, Windows сказал, что он просто не видит такую dll-ку, но я сразу перевёл на человеческий. Ладно. Попробовал засунуть эту dll-ку в папку system32. «Теперь видишь?» — спросил я Винду той же командой. «Вижу» — ответила Винда, — «но всё равно, эта dll-ка мне не нравится». Точнее, она выдала ошибку, что на этой версии Винды такая dll-ка работать не будет.

Читайте также:
Программа обучения овз что это

Стал искать, как решить эту проблему. Оказалось, что в 64-ёх битной Винде есть не один, а два файла «RegSvr32.exe», один в папке «%systemroot%System32», это 64-ёх битная версия, и ещё один — в папке «%systemroot%SysWoW64» — эта 32-ух битная версия. Попробовал скопировать файл «V7Plus.dll» в папку «%systemroot%SysWoW64» и дать винде команду «%systemroot%SysWoW64regsvr32.exe v7plus.dll».

Съела. «Опаньки!» — подумал я, и начал выяснять, что у нас с xml-парсером в 32-ух-битной части Винды. Дал ей команду «%systemroot%SysWoW64regsvr32.exe /u msxml3.dll» — нормально. Винда сообщила, что операция прошла успешно. Вернул регистрацию командой «%systemroot%SysWoW64regsvr32.exe msxml3.dll». Успешно. Следующая команда «%systemroot%SysWoW64regsvr32.exe /u msxml4.dll» выявила проблему.

Винда сказала, что в упор не видит dll-ку, которая конечно же лежала в папке «%systemroot%SysWoW64». Попробовал регистрацию этой dll-ки командой «%systemroot%SysWoW64regsvr32.exe msxml4.dll» — Винда сказала, что при регистрации dll-ки произошла ошибка.

Стало понятно, что проблема в этой «%systemroot%SysWoW64msxml4.dll». Благо у меня под рукой оказалась седьмая винда, только 32-ух-битная. Залез в неё, чтобы скопировать оттуда правильную dll-ку.

Msxml-парсера четвёртой версии там не оказалось, пришлось его туда установить (отсюда), после чего правильные файлы («msxml4.dll» и «msxml4r.dll») были скопированы в папку «%systemroot%SysWoW64» 64-ёх-битной Винды вместо неправильных. Неправильных файлов, к слову сказать, оказалось больше — «msxml4.dll», «msxml4a.dll», «msxml4r.dll» и «msxml4.inf», при этом «msxml4r.dll» и «msxml4.dll» отличались по датам создания от неправильных. После помещения правильных файлов в нужную папку команда «%systemroot%SysWoW64regsvr32.exe msxml4.dll» прошла на ура, после чего 1С-ка заработала как миленькая. К слову сказать, регистрировать dll-ку «V7Plus.dll» скорее всего не надо. Убеждаться в этом мне было лень.

После обновления винды отличным от правильного оказался только один файл — «msxml4r.dll». 1С-ка работает и после обновления. Фуф. Какая из программ испортила «XML Parser» выяснить не удалось.

Источник: diman-novik-ru.livejournal.com

Рушим стереотипы о HTTP и XML. (XMLHTTP и MSXML2) На примере API «Новая Почта»

За последние 2 года встречалось много конфигураций, с морально-устаревшими механизмами, написанные гуру старой закалки. В свое время подобные методы были шагом вперед, за что и «респект» их творцам, но время не стоит на месте. Более всего меня угнетает «копи-паст» кода. У большинства 1с-ников со стажем есть целые библиотеки нужных вещиц.

Но за 2-3 года все устаревает, а вот библиотечки то остаются без прогресса. Но это еще пол беды. Самое неприятное — это когда «молодые творцы», тем же «копи-пастом», строят целые схемы обменов, наращивая код до полной не читабельности. Решил поделится одним из подобных «атавизмов». В данной статье подробно опишу схему работы с API посредством XMLHTTP и MSXML2, самым оптимальным (из моего опыта) способом.

Статье больше 2-х лет. Лично я сейчас практически для всего уже использую ElisyNetBridge, гружу ассамблею и ни в чем себе не отказываю. Да и встроенные механизмы 8.3 внушают доверие, касательно кроссплатформенности. Статья на момент написания уже немного уступала прогрессу, а сейчас и подавно.

Но кто использует старые платформы с той или иной причины — будет все равно полезно, поэтому публикацию не скрываю. Стандартными механизмами пост запросы иногда без бубна не взлетают, с телом запроса постоянно нужно тыкаться, даже в 838, таки юзал хмлхттп недавно. А в целом — статья морально устаревшая. Да и АПИ Новой Почты уже перешагнуло отметку беты и увидела мир вторая версия.

С чего бы начать. Наверное с самой сути общения 1с и АПИ.

Википедия говорит, что АПИ это «набор готовых классов , процедур , функций , структур и констант , предоставляемых приложением (библиотекой, сервисом) для использования во внешних программных продуктах. Используется программистами для написания всевозможных приложений.»

Читайте также:
Robur что за программа

Физически это дело можно сравнить с сервисом, слушающий POST запросы и отвечает источнику в соответствии с определенными сервером правилами. (не буду углублятся)

Значит суть весьма проста: По HTTP-протоколу отправить POST-запрос и дождатся ответа.

Теперь время немного углубиться.
Зачастую я встречал такой принцип в большинстве конфигураций: 1. Генерим XML с помощью Новый Запись XML, сохраняем во временную папку.
2. Открываем Новый HTTPСоединение() и «пихаем» в него нашу XML.

ОтправитьДляОбработки(ФайлXML, РесурсНаСервере, ФайлРезультата)

3. Получаем XML ответ.
4. В рекурсии обходим сие багатство с помощью Новый Чтение XML() и складываем все в дерево значений.
5. Опять в рекурсии обходим дерево для получения определенных данных. Ну просто мраки. По 100500 раз дергать файловую систему, сорить в кэше и забивать оперу временной всячиной во время обхода потенциально не нужных вещей.

Теперь в кратце, что мы будем оптимизировать на примере апи новой почты :
1. Общение с сервисом переводим на более стабильные xmlhttp
2. Для быстрого получения списка отделений — уходим от универсальности и «рекурсии на все случаи жизни», используем свой парсер msxml2 .
4. Так же уйдем от сохранения временных файлов. будем использовать тип «строка» для чтения и передачи XML.
5. Научимся использовать синхронные запросы xmlhttp. 1. Функция отправки запроса. Весьма легкая на подъем на WIN-осях (Совсем забыл уточнить, о никсах сегодня речь идти не будет)

Функция ОтправитьЗапрос(ТекстXML) Адрес = «http://orders.novaposhta.ua/xml.php»; Попытка XMLHTTP = GetCOMObject(«», «Microsoft.XMLHTTP»); XMLHTTP.Open(«POST», Адрес, Ложь); XMLHTTP.SetRequestHeader(«Content-Type», «text/xml»); XMLHTTP.Send(ТекстXML); Возврат XMLHTTP.ResponseText; Исключение Возврат Неопределено КонецПопытки; КонецФункции

Функция вернет ResponseText, в нашем случае, это такой же текст XML, как мы отправляли, который нам необходимо прочитать и обработать. И тут начинается настоящая магия =) Что бы не отвалиться на пустом ответе — проверим код ответа.

Функция ПрочитатьResponseTextXML(ResponseText) xmlParser= новый COMОбъект(«msxml2.domdocument.6.0»); //Подняли ком xmlParser.loadXML(ResponseText); // Сказали прочитать текст XML responseCode = xmlParser.selectSingleNode(«//response/responseCode»).text;//Нашли представление узла по абсолютному пути Возврат responseCode; // Вернули полученное значение КонецФункции

xmlParser ведет себя весьма дружелюбно при чтении пустой строки или некорректного ответа. И на инглише отвечает нам исключением, если что. Но подстраховатся не помешает, темболее это лишит нас лишних дальнейших»телодвижений» Следующая функция отправляет запрос на получения подразделений и парсит уже с отбором по городам. (иногда хранить всю иерархию подразделений и городов не охота + синхронизировать постоянно, а ждать загрузки всего этого добра еще менее охотней), по этому самое оптимальное решение — получать только то, что нужно и не более. Об этом немного ниже.

Функция ПолучитьТаблицуОтделений(АПИКлюч,Город) Экспорт
ОтветXMLHTTP = ОтправитьЗапрос(ТекстXML); Если ОтветXMLHTTP = Неопределено Тогда Возврат Неопределено; КонецЕсли; ТаблицаРезультат = ПрочитатьXMLПодразделений(ОтветXMLHTTP, Город); Возврат ТаблицаРезультат; КонецФункции

ОтветXMLHTTP, при успешном соединении, содержит в себе текст XML, над которым будем танцевать с бубном, что бы пропарсить как можно быстрее.

Функция ПрочитатьXMLПодразделений(XMLString, Город) ТаблицаРезультат = Новый ТаблицаЗначений; // Инициализируем ТЗ ТаблицаРезультат.Колонки.Добавить(«Город»); ТаблицаРезультат.Колонки.Добавить(«Адрес»); ТаблицаРезультат.Колонки.Добавить(«НомерОтделения»); xmlParser= новый COMОбъект(«msxml2.domdocument.6.0»); // Поднимем КОМ xmlParser.loadXML(XMLString); responseCode = xmlParser.selectSingleNode(«//response/responseCode»).text; // Получим значение узла responseCode Если responseCode = «200» Тогда colNodes = xmlParser.selectNodes(«//response/result/whs/warenhouse[cityRu='»+Город+»‘]»); // конструкция [cityRu='»+Город+»‘] вернет мне массив узлов уровня warenhouse, где cityRu равен Город Если colNodes.length = 0 Тогда // если совпадений на ру — нет, то ищем названия на укр. colNodes = xmlParser.selectNodes(«//response/result/whs/warenhouse[city='»+Город+»‘]»); КонецЕсли; Для Каждого ElementNodes из colNodes Цикл НоваяСтрока = ТаблицаРезультат.Добавить(); НоваяСтрока.Город = ElementNodes.childNodes.item(3).text; НоваяСтрока.Адрес = ElementNodes.childNodes.item(6).text; НоваяСтрока.НомерОтделения = ElementNodes.childNodes.item(7).text; КонецЦикла; КонецЕсли; Возврат ТаблицаРезультат; КонецФункции

И напоследок призент =) Состояние заказа. Видел я как-то 3-х этажную функцию по получению статуса. Вот думаю, поделюсь более свежей.

Функция ПолучитьСостояниеЗаказа(НомерЗаказа, АПИКлюч) Экспорт
ОтветXMLHTTP = ОтправитьЗапрос(ТекстXML); Если ОтветXMLHTTP = Неопределено Тогда Возврат «»; КонецЕсли; xmlParser= новый COMОбъект(«msxml2.domdocument.6.0»); xmlParser.loadXML(ОтветXMLHTTP); responseCode = xmlParser.selectSingleNode(«//file/document»); Если responseCode <> Неопределено Тогда Статус = responseCode.getAttribute(«status»); Если Статус <> Неопределено Тогда Возврат Статус; КонецЕсли; КонецЕсли; Возврат «»; КонецФункции

Надеюсь потратил не зря время на написание сего труда и пару советов все же почерпнуть можно =)))
Лично в моем случае прирост быстродействия, в последней измененной конфигурации, в среднем составил 400-500 %

З.Ы. Прошу прощение за скрины с xml, при сохранении все тэги удалялись. Не знаю с чем связано.

Источник: infostart.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru