Имя: Пароль:
1C
 
чтение xml
0 paradise
 
20.01.09
17:45
Подскажите как в цикле перебрать все узлы документа xml. Есть иерархия узлов. Спасибо
1 Serg_1960
 
20.01.09
17:58
Я использовал XMLviewer.epf для того чтобы "на практике" изучить как работать с XML. А также процедуры и функции планы обмена в конфе помогли
2 paradise
 
20.01.09
18:01
Меня интересует как написать "пока узел.следующий", чтобы пройтись по всем узлам одной глубины?
3 Serg_1960
 
20.01.09
18:10
ЧтениеXML (XMLReader)
Пропустить (Skip)
Синтаксис:
Пропустить()
Описание:
Пропускает дочерние узлы текущего узла и позиционируется на следующий узел.
Если текущий узел не содержит подчиненных узлов, то вызов метода аналогичен Прочитать, Прочитать, Прочитать, в противном случае осуществляется пропуск всех дочерних узлов и осуществляется позиционирование на следующем узле.
4 Serg_1960
 
20.01.09
18:15
Я не зря указал Вам обработку. Там есть нужный Вам алгоритм. Вам наверное типо этого нужно:

Пока Чтение.Прочитать() Цикл
  Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
     ...
     Чтение.Пропустить();
  КонецЕсли;
КонецЦикла;
5 Serg_1960
 
20.01.09
18:17
Все-таки укажу алгорит из обработки :) Автор строит дерево узлов:

Функция Парсинг() Экспорт
   Чтение = Новый ЧтениеXML();
   Чтение.УстановитьСтроку(Документ);
   ДеревоЗначений = Новый ДеревоЗначений();
   Попытка
       Чтение.Прочитать();
   Исключение
       Предупреждение("Документ XML поврежден");
       Возврат ДеревоЗначений;
   КонецПопытки;
   ДеревоЗначений.Колонки.Добавить("Элемент");
   ДеревоЗначений.Колонки.Добавить("Текст");
   ДеревоЗначений.Колонки.Добавить("Атрибуты");
   Корень         = ДеревоЗначений.Строки.Добавить();
   Корень.Элемент = Чтение.Имя;
   Рекурсия(Корень, Чтение);
   Возврат ДеревоЗначений;
КонецФункции

Процедура Рекурсия(СтрокаДерева, Чтение)
   АтрибутыСоответствие = Новый Соответствие();
   Пока Чтение.ПрочитатьАтрибут() Цикл
       АтрибутыСоответствие.Вставить(Чтение.Имя, Чтение.Значение);
   КонецЦикла;
   Если АтрибутыСоответствие.Количество() > 0 Тогда
       СтрокаДерева.Атрибуты = АтрибутыСоответствие;
   Иначе
       АтрибутыСоответствие = 0;
   КонецЕсли;
   Пока Чтение.Прочитать() Цикл
       Если Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
           Прервать;
       ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
           СтрокаДерева.Текст = Чтение.Значение;
       ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
           Дочерний         = СтрокаДерева.Строки.Добавить();
           Дочерний.Элемент = Чтение.Имя;
           Рекурсия(Дочерний, Чтение);
       КонецЕсли;
       ОбработкаПрерыванияПользователя();
   КонецЦикла;
КонецПроцедуры
6 paradise
 
20.01.09
18:19
спасибо большое, вроде "оно"
7 Serg_1960
 
20.01.09
18:24
(6) :) А обработочку Вы себе скачайте - полезная штучка ;)