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

regsvr32 /u msxml4.dll
regsvr32 msxml3.dll

Но это костыль, так как если какая-то программа потребует именно msxml4 - то..
7 Serginio1
 
12.10.17
17:22
8 AliAksA
 
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");
9 AliAksA
 
13.10.17
09:41
(0) ох сори не прально читал, при загрузке нужно читать как последовательный документ:

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

    DOMDocument    = СоздатьОбъект("MSXML2.DOMDocument");
    DOMDocument.load(ИмяФайла);

и вперёд

http://www.script-coding.com/XMLDOMscripts.html
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс