|   |   | 
| 
 | Как прочитать комментарий в заголовке XML из DOMДокумента? | ☑ | ||
|---|---|---|---|---|
| 0
    
        Crush 08.10.14✎ 15:26 | 
        Файл начинается со строк:
 <?xml version="1.0" encoding="windows-1251"?><!--бла бла бла--> Строки эти добавляются так: дом.ДобавитьДочерний(дом.СоздатьКомментарий("бла бла бла")); Читаю так: дом = ПостроительДОМ.Прочитать(ЧтениеХМЛ); Вот как мне получить строчку = "бла бла бла"? | |||
| 1
    
        Asmody 08.10.14✎ 15:36 | 
        Перебрать дочерние узлы, найти где ТипУзла = ТипУзлаDOM.Комментарий, у него посмотреть свойство ЗначениеУзла     | |||
| 2
    
        DrZombi гуру 08.10.14✎ 15:39 | 
        (0) А отладчик уже забанили?     | |||
| 3
    
        Crush 08.10.14✎ 15:43 | 
        (1) Спасибо конечно, но не то.
 В Дочерних узлах только один узел с типом Элемент, он же ЭлеемнтДокумента. | |||
| 4
    
        Banned 08.10.14✎ 15:44 | 
        Открыть как текст     | |||
| 5
    
        Asmody 08.10.14✎ 15:50 | 
        (3) А у этого элемента тоже есть дочерние элементы. Оно же дерево.     | |||
| 6
    
        Crush 08.10.14✎ 15:56 | 
        (5) :) и памятник
 Мне то нужен комментарий, который находится перед главной веткой этого дерева. <?xml version="1.0" encoding="windows-1251"?> <!--бла бла бла--> <ГлавнаяВетка> <!--Этот коммент мне не нужен! Нужен тот что выше--> <СледующаяВетка/> </ГлавнаяВетка> Попробую через ЧтениеУзловDOM. Ни разу еще пользовался, вдруг взлетит. | |||
| 7
    
        Crush 08.10.14✎ 16:18 | 
        ПерейтиКСодержимому() игнорирует комментарии
 из СП:Примечание: Будут пропущены следующие типы узлов: ОбъявлениеXML, ИнструкцияОбработки, ОпределениеТипаДокумента, Комментарий. Метод Прочитать() позиционируется на начале элемента. Походу тоже игнорирует комментарии. Как еще можно, не прибегая к (4)? | |||
| 8
    
        Krolik Bezobraznik 08.10.14✎ 16:45 | 
        Я делаю так
 мДОМ = новый ПостроительDOM; мДокументДОМ = мДОМ.Прочитать(ФайлОбмена); мРазыменовательПИ=мДокументДОМ.СоздатьРазыменовательПИ(мДокументДОМ); мЗапрос="./*"; мХПуть=мДокументДОМ.СоздатьВыражениеXPath(мЗапрос,мРазыменовательПИ); мРезультат=мХПуть.Вычислить(мДокументДОМ); мРодитель=мРезультат.ПолучитьСледующий(); пока мРодитель<>неопределено цикл ШапкаДокумента.Вставить(мРодитель.ИмяУзла, мРодитель.ТекстовоеСодержимое); мРодитель=мРезультат.ПолучитьСледующий(); конеццикла; В переменной мЗапрос записывай полный путь до узла, который ты хочешь загрузить. | |||
| 9
    
        Asmody 08.10.14✎ 16:56 | 
        (8) Интересно, какой будет путь до комментария, который до главного узла?     | |||
| 10
    
        Krolik Bezobraznik 08.10.14✎ 17:00 | 
        (9) Да я как то пропустил суть, что надо комментарий получить =)     | |||
| 11
    
        DS 08.10.14✎ 17:21 | 
        Хотелось бы узнать, как удалось записать комментарий XML тем способом, что указан в (0).     | |||
| 12
    
        Crush 13.10.14✎ 15:00 | 
        (11)         
 дом = Новый ДокументDOM(); дом.ДобавитьДочерний(дом.СоздатьКомментарий("бла бла бла")); ХМЛ=Новый ЗаписьXML; ХМЛ.ОткрытьФайл(ИмяФайлаВыгрузки); ЗаписьДОМ=Новый ЗаписьDOM; ЗаписьДОМ.Записать(дом,ХМЛ); ХМЛ.Закрыть(); | |||
| 13
    
        DS 13.10.14✎ 15:26 | 
        (12) Ну, это случайно удалось так сделать. Так сказать недокументированная возможность. По сути этот коментарий должен был вложиться в документ. Но т. к. в конструкторе не был указан обязательный реквизит - имя документа (главного узла), то этот узел и не был создан.
 Надо написать 1с по поводу такого поведения конструктора ДокументDOM. | |||
| 14
    
        Crush 13.10.14✎ 15:33 | 
        (13) Нормально отрабатывает. Вложенные узлы так же добавляю.
 Кстати тема решена. Следующим постом - решение;) | |||
| 15
    
        Crush 13.10.14✎ 15:35 | 
        Нужно было при чтении указать параметры (ПараметрыЧтенияXML(,,,,,,,Ложь)), тогда в дочерних узлах будут коменты.
 ЧтениеХМЛ = Новый ЧтениеXML; ЧтениеХМЛ.ОткрытьФайл(ИмяФайла,Новый ПараметрыЧтенияXML(,,,,,,,Ложь)); ПостроительДОМ = Новый ПостроительDOM; ДокументДОМ = ПостроительДОМ.Прочитать(ЧтениеХМЛ); ЧтениеХМЛ.Закрыть(); Для каждого Узел Из ДокументДОМ.ДочерниеУзлы Цикл Если ТипЗнч(Узел)=Тип("КомментарийDOM") Тогда Сообщить(Узел.ЗначениеУзла); КонецЕсли; КонецЦикла; | |||
| 16
    
        DS 13.10.14✎ 15:38 | 
        Это понятно.
 Но что будет, если прочитать файл, созданный в (12)? | |||
| 17
    
        Crush 13.10.14✎ 15:46 | 
        (16) Он не прочитается, т.к. нет корневого узла.
 Нужно так: дом = Новый ДокументDOM(); дом.ДобавитьДочерний(дом.СоздатьКомментарий("бла бла бла")); дом.ДобавитьДочерний(дом.СоздатьЭлемент("Корень")); ХМЛ=Новый ЗаписьXML; ХМЛ.ОткрытьФайл(ИмяФайлаВыгрузки); ЗаписьДОМ=Новый ЗаписьDOM; ЗаписьДОМ.Записать(дом,ХМЛ); ХМЛ.Закрыть(); | |||
| 18
    
        DS 13.10.14✎ 16:24 | 
        Для меня, честно говоря, конструктор "Новый ДокументDOM();" без параметров просто откровение.     | |||
| 19
    
        Crush 13.10.14✎ 16:48 | 
        (18) :)ага. Сам только обратил внимание.:) в СП описаны два конструктра и минимум два параметра - ОБЯЗАТЕЛЬНЫЕ.
 Но, СП - это СП. А Новый ДокументDOM() - это DOM документ:) Вспомнился анекдот, когда сын программиста спрашивал у папы про движение солца за окном. На что папа выяснил стабильность движения и попросил ничего не трогать, мол пока и так стабильно работает:) | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |