Имя: Пароль:
1C
 
Не отрабатывает код считывания 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);
        КонецЕсли;
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.