Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как правильно прочитать XML?
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
Vofka
Привет!

Есть XML такого вида:

Цитата
- <file>
- <order>
<date>03.08.2011 13:00:43</date>
<number>ЦХ-000000009140</number>
<inventorynom>280079040803242</inventorynom>
...


Как правильно вычитать значения 03.08.2011 13:00:43, ЦХ-000000009140, 280079040803242?
alex040269
Цитата(Vofka @ 25.08.11, 10:52) необходимо зарегистрироваться для просмотра ссылки
Привет!

Есть XML такого вида:



Как правильно вычитать значения 03.08.2011 13:00:43, ЦХ-000000009140, 280079040803242?


Все очень просто!

XMLЧтение.Прочитать();
Затем проверяем XML.ТипУзла.

Если это НачалаЭлемента или КонецЭлемента, то у него XMLЧтение.Имя = file, order и т.д.
Если не то и другое, то тогда XMLЧтение.Значение = 03.08.2011 13:00:43, ЦХ-000000009140 и т.д.

Нужно сразу учесть рекурсию и то, что после начала элемента может быть его конец.
Vofka
alex040269, это всё хорошо, но... smile.gif Если это значение - то не видно какого узла это значение, что в общем-то самое плохое sad.gif . У меня есть кое-какие грязные мысли smile.gif как это всё сделать, но я думал, что может быть, есть какой-то "волшебный" метод, которого я не знаю, который позволяет читать файлы такой структуры не заморачиваясь.
alex040269
Цитата(Vofka @ 25.08.11, 11:40) необходимо зарегистрироваться для просмотра ссылки
alex040269, это всё хорошо, но... smile.gif Если это значение - то не видно какого узла это значение, что в общем-то самое плохое sad.gif . У меня есть кое-какие грязные мысли smile.gif как это всё сделать, но я думал, что может быть, есть какой-то "волшебный" метод, которого я не знаю, который позволяет читать файлы такой структуры не заморачиваясь.

Если Это значение то оно идет всегда сразу после НачалаЭлемента.
Vofka
Цитата
Если Это значение то оно идет всегда сразу после НачалаЭлемента.

Понятно. Но в этот момент имя узла в котором это значение - именуется как "#text", т.е. предварительно имя узла выше по иерархии тоже надо где-то запомнить, чтоб потом определить к какому узлу фактически относится это значение.
Vofka
Сделал пока так:

    СтрутураБлока = Новый Структура;
    
    ИмяУзла = "";
    
    Пока Чтение.Прочитать() Цикл
        
        Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            Если ИмяУзла = "order" Тогда
                СтрутураБлока.Очистить();
            КонецЕсли;
            
            ИмяУзла = Чтение.Имя;
            СтрутураБлока.Вставить(ИмяУзла, "");
            
        ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
            
            Если ИмяУзла = "" Тогда
                Сообщить("Какая-то беда!");
                Продолжить;
            КонецЕсли;
            СтрутураБлока.Вставить(ИмяУзла, Чтение.Значение);
            
        ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
            ИмяУзла = "";
        КонецЕсли;
    КонецЦикла;


Не нравится мне это, но пока так. Если кто-то предложит вариант по красивее - буду рад smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.