Имя: Пароль:
1C
1С v8
1с:предприятие 8.3 - чтение xml
0 roshyroshy
 
08.09.17
09:48
есть xml примерно след содержания:

<yml_catalog date="2017-09-08 00:00">
  <shop>
    <name>magazin</name>
    <url>https://magazin.ru/</url>;
    <platform>Shop-Script</platform>
    <currencies>
      <currency id="RUB" rate="1"/>
      <currency id="USD" rate="59.25"/>
      <currency id="EUR" rate="69.650000000000006"/>
    </currencies>
  </shop>
</yml_catalog>

в 1с создала обработку, в ней табличную часть - валюты с реквизитами id и rate. плюс - сделала форму, куда прописала кнопку на чтение xml:

&НаКлиенте
Процедура выборфайла(Команда)
    режим = режимдиалогавыборафайла.Открытие;
    диалоготкрытияфайла = новый диалогвыборафайла(режим);
    фильтр = "xml|*.xml";
    диалоготкрытияфайла.фильтр = фильтр;
    если диалоготкрытияфайла.выбрать() тогда
        файлхмл = диалоготкрытияфайла.выбранныефайлы;
        для каждого фхмл из файлхмл цикл
        выборфайлаНаСервере(фхмл);
        конеццикла;
    конецесли;
    обновитьинтерфейс();
КонецПроцедуры

далее - нужно значения из currencies перенести в созданную табличку, но там фича с уровнем вложенности, определение куда и что писать вкупе с моим тотальным непониманием как это делать.
методом гугления набрала куски кода, что суммарно стало выглядеть так:

&НаСервере    
    Процедура выборфайланасервере(файлхмл)
  Парсер = Новый ЧтениеXML;
  Парсер.открытьфайл(файлхмл);
  Построитель = Новый ПостроительDOM;
  Документ = Построитель.Прочитать(Парсер);
Для Каждого Элемент0 Из Документ.ЭлементДокумента.ДочерниеУзлы Цикл
Если Элемент0.ИмяУзла = "shop" Тогда
shop = Элемент0;
Для Каждого Элемент1 Из shop.ДочерниеУзлы Цикл
                Если Элемент1.ИмяУзла = "currencies" Тогда
                    currencies = Элемент1;
                    Сообщить("currencies:");
                    Для Каждого Элемент2 Из currencies.ДочерниеУзлы Цикл
                        Если Элемент2.ИмяУзла = "currency" Тогда
                           currency = Элемент2;
                            id = currency.Атрибуты.ПолучитьИменованныйЭлемент("id");
                            Если id <> Неопределено Тогда
                                Сообщить(" " + id.Значение);            
                            rate = currency.Атрибуты.ПолучитьИменованныйЭлемент("rate");
                            Если rate <> Неопределено Тогда
                                Сообщить(" " + rate.Значение);
                            КонецЕсли;
                            КонецЕсли;
                        КонецЕсли;              
                    КонецЦикла;
                КонецЕсли;              
КонецЦикла;
КонецЕсли;              
КонецЦикла;
Парсер.Закрыть();
КонецПроцедуры

крч, нужна помощь (а это и так видно из кода и общей атмосферы отчаяния).
Основная теорема систематики: Новые системы плодят новые проблемы.