Вход | Регистрация

1С:Предприятие ::

Метки: 

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
 
 Рекламное место пустует


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