Имя: Пароль:
1C
1С v8
Оперделение уровня вложенности тегов при использовании ЧтениеXML
,
0 bvb
 
01.07.14
12:00
Читаю XML файл классическим способом :
Пока Чтение.Прочитать() Цикл
        
        Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            
            ИмяУзла = Чтение.Имя;
            ЗначениеУзла = Чтение.Значение;
                    
            Пока Чтение.ПрочитатьАтрибут() Цикл

Хочу отобразить прочитанный файл в дереве значений.
Проблема том что прочитав узел я не знаю как определить в какие узлы - родители он вложен.
Как определить является ли узел корневым или подчинен какому то узлу ?
1 spectre1978
 
01.07.14
12:59
(0) По-моему, никак. Специальные средства такого рода есть в DOM. ЧтениеXML - это простейшее последовательное чтение, как интерпретировать данные и разбираться с ними - полностью зависит от программиста, никаких дополнительных средств, кроме доступа к текущему прочитанному узлу, не предоставляется.
2 anddro
 
01.07.14
13:06
DOM не интересно, фабрика прикольнее:

Читатель = Новый ЧтениеXML;
Читатель.ОткрытьФайл(ПолноеИмяФайла);
ОбъектДанные = ФабрикаXDTO.ПрочитатьXML(Читатель);
Читатель.Закрыть();
//смотреть ОбъектДанные под отладчиком

ЗЫ: переименуйте тему
3 bvb
 
01.07.14
15:53
а можно отослать к источникам где можно подробнее прочитать про DOM модель и фабрику ?
4 Serginio1
 
01.07.14
16:25
5 РенеДекарт
 
01.07.14
16:39
(2)>DOM не интересно, фабрика прикольнее
DOM - это именно модель и формат представления данных. Фабрика - просто средство обработки XML.
6 Separator
 
01.07.14
16:46
(0) предлагаю, все-таки, поправить заголовок. Понимаю, что так лучше отражает состояние под конец рабочего дня :)
Но все же...
7 Крошка Ру
 
01.07.14
16:48
(6) Не просто "лучше отражает", а "в самую точку", я бы сказал. Предлагаю заголовок оставить.
8 Dionisious
 
01.07.14
16:49
А что такого то? рекурсивную функцию написать и все. Сейчас накидаю.
9 РенеДекарт
 
01.07.14
16:50
(7) "оперделось" уже все? ))
особенно после мыслереализации функции... :D
10 Dionisious
 
01.07.14
16:52
Что то типа того:

Процедура XMLВДерево(Файл, Строки)

    Имя = Файл.ЛокальноеИмя;
    
    Пока Файл.Прочитать() Цикл
        Если (Файл.ЛокальноеИмя = Имя) И (Файл.ТипУзла = ТипУзлаXML.КонецЭлемента) Тогда
            Прервать;
        КонецЕсли;
        Если Файл.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            Строка = Строки.Добавить();
            // Заполнить строку дерева
            XMLВДерево(Файл, Строка.Строки);
        КонецЕсли;
    КонецЦикла;

КонецПроцедуры
11 Крошка Ру
 
01.07.14
16:53
(9) В отпуск заявление написал, душевное здоровье восстанавливать
12 spectre1978
 
01.07.14
16:54
(10) Это все понятно... Более того - для достаточно увесистого XML разбор через SAX, наверное, единственный рабочий вариант. Но вопрос, если я его правильно понял, был про встроенные средства.
13 Separator
 
01.07.14
16:54
(7) Согласен, но, тогда, надо слово "от" вторым в заголовок вставить. Точнее будет.
14 Масянька
 
01.07.14
16:56
(9) Надеюсь, Catena уже в блокнотик занесла :)))
15 РенеДекарт
 
01.07.14
16:56
(12)>для достаточно увесистого XML разбор через SAX
через чего? в 1С "саккс" - это рабочий вариант? ну, где-то близко, да ))
16 РенеДекарт
 
01.07.14
16:58
(14) там еще другие глубины мыслеобразов есть, Вобланд развивает ))
17 spectre1978
 
02.07.14
10:46
(15) SAX это ЧтениеXML
wiki:SAX
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший