Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Как правильно прочитать XML?          
Vofka Подменю пользователя
сообщение 25.08.11, 9:52
Сообщение #1

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Привет!

Есть 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 Подменю пользователя
сообщение 25.08.11, 10:34
Сообщение #2

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

Цитата(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 и т.д.

Нужно сразу учесть рекурсию и то, что после начала элемента может быть его конец.


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

Vofka Подменю пользователя
сообщение 25.08.11, 10:40
Сообщение #3

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

alex040269, это всё хорошо, но... smile.gif Если это значение - то не видно какого узла это значение, что в общем-то самое плохое sad.gif . У меня есть кое-какие грязные мысли smile.gif как это всё сделать, но я думал, что может быть, есть какой-то "волшебный" метод, которого я не знаю, который позволяет читать файлы такой структуры не заморачиваясь.

alex040269 Подменю пользователя
сообщение 25.08.11, 10:46
Сообщение #4

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

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

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


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

Vofka Подменю пользователя
сообщение 25.08.11, 10:51
Сообщение #5

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

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

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

Vofka Подменю пользователя
сообщение 25.08.11, 12:02
Сообщение #6

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Сделал пока так:

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


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

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 26.04.24, 20:34
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!