Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Как парсить xml-документ с пространствами имен через v7plus.dll?

v7: Как парсить xml-документ с пространствами имен через v7plus.dll?
Я
   Провинциальный 1сник
 
12.10.17 - 15:52
Есть xml-документ (реестр выгруженной зарплаты из ЗУП3), нужно его загрузить в семерку. С xml раньше в семерке работал, создавал и читал файлы через v7plus - но с пространствами имен и схемами не сталкивался. А тут при попытке загрузить файл таким кодом:

    Анализатор=СоздатьОбъект("AddIn.XMLParser");
    ОсновнойДокумент=Анализатор.СоздатьДокумент();
    ОсновнойДокумент.Загрузить(ИмяФайлаЗагрузки);

Вылетает такая вот ошибка:

Type '{http://v8.1c.ru/edi/edi_stnd/109}СчетПК' is not found in Schema.
[<СчетаПК xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xmlns="http://v8.1c.ru/edi/edi_stnd/109"; xsi:type="СчетПК"...

Если из xml-файла вырезать эту муть с пространствами имен, то он парсится нормально. Подскажите, что нужно написать в коде, чтобы правильно парсить такие файлы?
 
 
   Kuzmich123
 
1 - 12.10.17 - 16:15
Правильно ругается, он не видит схемы XSD с описанием этого типа, а схему в 1с прикручивается только через фабрику XDTO в 8.х, так что перспективы у тебя так себе
   HawkEye
 
2 - 12.10.17 - 16:32
(1) как же работает ЕГАИС в 7.7?
   Провинциальный 1сник
 
3 - 12.10.17 - 16:33
(1) А нет возможности заставить парсер игнорировать описание схемы пространства имен, чтобы xml парсился в стандартной схеме?
   Kuzmich123
 
4 - 12.10.17 - 16:46
2 (1) Хороший, вопрос, кстати. ХЗ. Я с 7.7 уже 5 лет не работаю
   Kuzmich123
 
5 - 12.10.17 - 16:46
2 (1) => 2 (2)
   Провинциальный 1сник
 
6 - 12.10.17 - 16:53
Методом гугления определил, что проблема может быть в версии библиотеки msxml. После отключения msxml4.dll и регистрации msxml3.dll всё заработало нормально.

regsvr32 /u msxml4.dll
regsvr32 msxml3.dll

Но это костыль, так как если какая-то программа потребует именно msxml4 - то..
   Serginio1
 
7 - 12.10.17 - 17:22
   AliAksA
 
8 - 13.10.17 - 09:37
(0) ну можно открыть программно как текст и заменить при помощи СтрЗаменить() ненужную муть на "";

ну а так лавай примерчик-с:

Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "v7plus.dll") = 1  Тогда
    ИначеЕсли ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() + "v7plus.dll") = 1 Тогда
    Иначе
        Предупреждение("Компонента v7plus.dll не найдена!");
        СтатусВозврата(0); Возврат;
    КонецЕсли;
    
    Анализатор = СоздатьОбъект("AddIn.XMLParser");
    Коллекция = Анализатор.СоздатьКоллекциюСхем();
    Дакумент = Анализатор.СоздатьДокумент();
    Дакумент.Кодировка = "UTF-8";
    Дакумент.РазрешатьВнешниеСсылки = 1;
    Дакумент.Схемы = Коллекция;
    Если ТипЭСЧФ = Перечисление.ТипыЭСЧФ.Исходный Тогда
        ФайлСхемы = "Schemas\MNSATI_original.xsd";
    ИначеЕсли ТипЭСЧФ = Перечисление.ТипыЭСЧФ.Дополнительный Тогда
        ФайлСхемы = "Schemas\MNSATI_additional.xsd";
    ИначеЕсли ТипЭСЧФ = Перечисление.ТипыЭСЧФ.Исправленный Тогда
        ФайлСхемы = "Schemas\MNSATI_fixed.xsd";
    Иначе
        Сообщить("В документе " + глНомерДатаДока(ТекущийДокумент()) + " не была определена схема для проверки !", "!");
        СтатусВозврата(0); Возврат;
    КонецЕсли;
    Коллекция.ДобавитьСхему("http://www.w3schools.com";, КаталогИБ()+ФайлСхемы);
    
    // УНП организации
    Данные = Дакумент.СоздатьПодчиненныйЭлемент("issuance", , "http://www.w3schools.com";);
    Данные.УстановитьАтрибут("sender", СокрЛП(Константа.ОсновнойКонтрагент.ИНН));
    
    Ветка = Данные.СоздатьПодчиненныйЭлемент("general");
   AliAksA
 
9 - 13.10.17 - 09:41
(0) ох сори не прально читал, при загрузке нужно читать как последовательный документ:

Анализатор = СоздатьОбъект("AddIn.XMLParser");
ФайлДанных = Анализатор.СоздатьПоследовательноСчитываемыйДокумент();
ФайлДанных.СвязатьСФайлом(перПуть);
   big
 
10 - 13.10.17 - 14:06
(6) Вот именно из-за этого и в топку v7plus (((
    DOMDocument    = СоздатьОбъект("MSXML2.DOMDocument");
    DOMDocument.load(ИмяФайла);

и вперёд

http://www.script-coding.com/XMLDOMscripts.html
 
 Рекламное место пустует

Список тем форума
Рекламное место пустует  Рекламное место пустует
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует