![]() |
![]() |
![]() |
|
чтение 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) :) А обработочку Вы себе скачайте - полезная штучка ;)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |