Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   разбор XML файла, ошибка "Попытка смены источника в процессе разбора документа" (http://forums.kuban.ru/f1040/razbor_xml_fajla_oshibka_popytka_smeny_istochnika_v_processe_razbora_dokumenta-7460036.html)

Target25 18.01.2016 10:54

разбор XML файла, ошибка "Попытка смены источника в процессе разбора документа"
 
Пытаясь загрузить файл правил из ЗуП в ЗиК, столкнулся с этой ошибкой. Копая, выяснил, что "сыпется" в момент разбора узлов типа "параметр". В двух словах: при выполнении метода "Следующий()" AddIn.XMLParser всегда возвращает тип тега "1" (начало нового элемента), и не возвращает в нужном месте тип тега "3" (конец уровня).

Я вырезал все лишнее из файла правил и написал небольшую программу, которая моделирует ситуацию и падает с ошибкой. Текст программы:
Процедура ОбработатьПараметры(мЧтениеXML)
ТипТега = мЧтениеXML.Спуститься();
Пока ТипТега = 1 Цикл
имяУзла = мЧтениеXML.СвойстваТекущегоУзла.Имя;
Сообщить("Параметры:ТипТега " + ТипТега + "; имя узла " + имяУзла);
ТипТега = мЧтениеXML.Следующий();// как только кончаются параметры, он должен дать тип тега =3

КонецЦикла;
мЧтениеXML.Подняться();
КонецПроцедуры
//----

Процедура ОбработатьПравилаОбмена(мЧтениеXML)
ТипТега = мЧтениеXML.Спуститься();
Пока ТипТега = 1 Цикл
имяУзла = мЧтениеXML.СвойстваТекущегоУзла.Имя;
Сообщить("Правила обмена:ТипТега " + ТипТега + "; имя узла " + имяУзла);
Если имяУзла = "Параметры" тогда
ОбработатьПараметры(мЧтениеXML);
КонецЕсли;
ТипТега = мЧтениеXML.Следующий();
КонецЦикла;
мЧтениеXML.Подняться();
КонецПроцедуры
//----

Процедура Сформировать()
ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() + "v7plus.dll");
мXMLАнализатор = СоздатьОбъект("AddIn.XMLParser");

мЧтениеXML = мXMLАнализатор.СоздатьПоследовательноСчитываемыйДокумент();
мЧтениеXML.СвязатьСФайлом("C:\ЗИК_ЗУП30.xml");
типТега = мЧтениеXML.Спуститься();
Если мЧтениеXML.СвойстваТекущегоУзла.Имя = "ПравилаОбмена" тогда
ОбработатьПравилаОбмена(мЧтениеXML);
КонецЕсли;
КонецПроцедуры

=========
Файл правил обмена "ЗиК_ЗУП80.xml":

<ПравилаОбмена>
<ВерсияФормата РежимСовместимости="РежимСовместимостиСБСП21">2.01</ВерсияФормата>
<Ид>1c87001b-6b3a-4277-a36d-1e6d1a6c9793 </Ид>
<Наименование>ЗиК --&gt; ЗУП 3.0</Наименование>
<ДатаВремяСоздания>2015-12-23T17:51:28</ДатаВремяСоздания>
<Источник></Источник>
<Приемник>БЗКР</Приемник>
<ПередВыгрузкойДанных></ПередВыгрузкойДанных>
<ПередЗагрузкойДанных></ПередЗагрузкойДанных>
<ПослеЗагрузкиДанных></ПослеЗагрузкиДанных>
<Параметры>
<Параметр/>
<Параметр/>
<Параметр/>
<Параметр/>
<Параметр/>
<Параметр/>
</Параметры>
<Обработки/>
<ПравилаКонвертацииОбъектов/>
<Запросы/>
</ПравилаОбмена>

========
скриншот ошибки:
[url]http://i.imgur.com/eoyLbxq.png[/url]
========

Прошу проверить это у себя, потому что есть подозрения, что это будет работать на других компьютерах и проблема где-то в msxml3.dll

bma1 18.01.2016 12:09

а попробовать читать через DOM?

angro 18.01.2016 14:20

ага в 7-ке было такое, мсхмл не той версии стоял


Текущее время: 07:01. Часовой пояс GMT +3.