|
Не отрабатывает код считывания xml | ☑ | ||
---|---|---|---|---|
0
maestro-72
18.11.15
✎
22:22
|
Собсно не отрабатывает код перехода на более нисший уровень
По структуре <1> <2> <3>..</3> </2> </3> Проходит функция Процедура ПрочитатьТеги(ТипТега, Ф) Ур = Ф.СвойстваТекущегоУзла.Уровень; ТипТега = Ф.Спуститься(); Пока ТипТега = 1 Цикл Объект = Ф.ТекущийЭлементВВидеОбъекта(); Значение = СокрЛП(Объект.Значение); Сообщить(Ф.СвойстваТекущегоУзла.Имя + " " + Объект.Значение); Если Объект.КоличествоПодчиненных() > 1 Тогда ТипТега = Ф.Спуститься(); ПрочитатьТеги(ТипТега, Ф); КонецЕсли; ТипТега = ф.Следующий(); КонецЦикла; КонецПроцедуры Код не переходит на нижний уровень по команде Спуститься() Всему виной функция текущийЭлементВВидеОбъекта() Если ее не использовать то все работает. Но как тогда понять, что у узла есть подчиненные. Просто хотел все в таблицу значений запихать, а тут такая засада. |
|||
1
neo_matrix_123
18.11.15
✎
22:42
|
(0) а если так?
Функция Парсинг() Экспорт Чтение = Новый ЧтениеXML(); Чтение.УстановитьСтроку(Документ); ДеревоЗначений = Новый ДеревоЗначений(); Попытка Чтение.Прочитать(); Исключение Предупреждение("Документ XML поврежден"); Возврат ДеревоЗначений; КонецПопытки; ДеревоЗначений.Колонки.Добавить("Элемент"); ДеревоЗначений.Колонки.Добавить("Текст"); ДеревоЗначений.Колонки.Добавить("Атрибуты"); Корень = ДеревоЗначений.Строки.Добавить(); Корень.Элемент = Чтение.Имя; Рекурсия(Корень, Чтение); Возврат ДеревоЗначений; КонецФункции Процедура Рекурсия(СтрокаДерева, Чтение) Если Чтение.КоличествоАтрибутов() > 0 Тогда АтрибутыСоответствие = Новый Соответствие(); Пока Чтение.ПрочитатьАтрибут() Цикл АтрибутыСоответствие.Вставить(Чтение.Имя, Чтение.Значение); КонецЦикла; СтрокаДерева.Атрибуты = АтрибутыСоответствие; КонецЕсли; //Состояние(Чтение.Имя); Пока Чтение.Прочитать() Цикл Если Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда Прервать; ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда СтрокаДерева.Текст = Чтение.Значение; ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Дочерний = СтрокаДерева.Строки.Добавить(); Дочерний.Элемент = Чтение.Имя; Рекурсия(Дочерний, Чтение); КонецЕсли; ОбработкаПрерыванияПользователя(); КонецЦикла; КонецПроцедуры //--------------------------------------------------------------- |
|||
2
maestro-72
19.11.15
✎
09:47
|
(1) Беда заключается в том, что в 77 нет возможности прочитать значение элемента не выбрав текущийЭлементВВидеОбъекта. А при применении этой функции программа перестает идти по структуре файла... И было бы все ничего...Как определить, что есть подчиненные уровни без того чтобы применять функцию ТекущийЭлементВВидеОбъекта
|
|||
3
НЕА123
19.11.15
✎
10:44
|
(0)
Если Объект.КоличествоПодчиненных() > 1 Тогда //ф1 = создатьобъект.... //ф1.связатьсобъектом(Объект) ТипТега1 = Ф1.Спуститься(); ПрочитатьТеги(ТипТега1, Ф1); КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |