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