|
v8: Запись xml документа через DOM ЗаписьУзловDOM | ☑ | ||
---|---|---|---|---|
0
kai17
24.08.12
✎
14:29
|
Подвернулась задача выгрузки XML файла из 1с во внешний файл .
По описанию для построения документа вполне подходит ДокументDOM . Читаю справку пользователя и рождается примерный код : ДокDOM = Новый ДокументDOM("http://metrics.org","Root"); // создание объекта ДОМ с корневым элементом ЗаписьУзлов = Новый ЗаписьУзловDOM; // создание объекта записи узлов DOM ЗаписьУзлов.Открыть(ДокDOM);// определение объекта DOM для записи . // добавление элемента (скопировано из справки пользователя) ЗаписьУзлов.ЗаписатьНачалоЭлемента("apple"); ЗаписьУзлов.ЗаписатьСоответствиеПространстваИмен("nsp", "http://metrics.org"); ЗаписьУзлов.ЗаписатьАтрибут("weight", "http://metrics.org", "12.5"); ЗаписьУзлов.ЗаписатьКонецЭлемента(); //ЗаписьУзлов.УзелDOM содержит верный документ DOM // ДокDOM не изменился ЗаписьУзлов.Закрыть(); // после закрытия объекта все изменения потеряны // вывод документа DOM в ХМЛ ЗаписьДом = Новый ЗаписьDOM; ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); ЗаписьДом.Записать(ДокDOM,ЗаписьXML); СтрокаXML = ЗаписьXML.Закрыть(); Сообщить(СтрокаXML) ; // ДокDOM содержит только корневой элемент , указанный в конструкторе Однако несмотря на все ухищрения в итоге файл XML формируется пустой . Проблема в объекте ЗаписьУзловDOM , который успешно выполняет все методы , не трогая при этом ДокументDOM . Как можно заставить ЗаписьУзловDOM перенести изменения в объект ДокDOM ? Может метод какой нужен ? PS 1С:Предприятие 8.2 (8.2.15.318) |
|||
1
kai17
27.08.12
✎
07:33
|
up
|
|||
2
andrewks
27.08.12
✎
08:18
|
я не вижу, где ты тут файл пишешь. у тебя в строку выводится
|
|||
3
andrewks
27.08.12
✎
08:21
|
в коде винегрет.
вот пример рабочего кода
|
|||
4
kai17
27.08.12
✎
08:31
|
Есть пример добавления элемента через объект ЗаписьУзловDOM ?
При добавлениия элементов непосредственно через ДокументDOM проблем нет . (3) винегрет в строке Сообщить(СтрокаXML) ; читать как вывод в окно сообщения ,а не файл . |
|||
5
andrewks
27.08.12
✎
08:35
|
(4) про файл это я уже понял, ты, видимо, сначала писал в файл, а потом переделал на вывод в сообщения, так?
по поводу конкретно записи через ЗаписьУзловDOM - щас у себя проверю |
|||
6
kai17
27.08.12
✎
08:48
|
(4) изначально действительно в коде был вывод в файл , затем был сформирован код для демонстрации проблемного места, максимально упрощенный . ЗаписьУзловDOM понадобился так как в коде записи используется ФабрикаXDTO , вот она производит запись ДокументDOM только через объект ЗаписьУзловDOM .
|
|||
7
andrewks
27.08.12
✎
08:53
|
у меня код из (0) ведёт себя так же. рабочего примера с ЗаписьУзловDOM у меня нет, т.к. не пользовался.
в любом случае, через ДокументDOM ты можешь сформировать любой xml-документ, в т.ч. с ns |
|||
8
andrewks
27.08.12
✎
08:55
|
http://infostart.ru/public/98019/
но там через чтение/записьхмл |
|||
9
andrewks
27.08.12
✎
08:57
|
вообще, некоторые объекты касательно хмл в 1С просто тупо не работают (по крайней мере, при проверке с пол-года назад не работали), например, КаноническаяЗаписьXML, чтение/запись FastInfoSet
|
|||
10
andrewks
27.08.12
✎
09:07
|
если подавать запись узлов на запись хмл (до ЗаписьУзлов.Закрыть(); ), тогда пишет:
ЗаписьДом.Записать(ЗаписьУзлов.УзелDOM,ЗаписьXML); |
|||
11
andrewks
27.08.12
✎
09:07
|
но пишет только этот фрагмент
|
|||
12
kai17
27.08.12
✎
09:14
|
(11) вот как перенести ЗаписьУзлов.УзелDOM в ДокументDOM непонятно . Если перенос не осуществляется , зачем тогда ЗаписьУзлов.Открыть(ДокDOM) делать ? Логика работы этого объекта совершенно непонятна . примеров работы с ЗаписьУзловDOM на знает даже гугл .
|
|||
13
andrewks
27.08.12
✎
09:14
|
(12)вопрос уже задавался на оф.форум 1с http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=593021&print=1 - ответа нет
|
|||
14
andrewks
27.08.12
✎
09:15
|
если есть желание и время - напиши в поддержку
|
|||
15
kai17
27.08.12
✎
09:17
|
(14) написал на партнерском форуме http://partners.v8.1c.ru/forum/thread.jsp?id=1073601
тут есть фрагмент кода v8: Подскажите по теме XDTO ... к сожалению тоже нерабочий . |
|||
16
andrewks
27.08.12
✎
09:24
|
(15) отпиши потом здесь, если ответят что-то внятное, а то доступ на партнёрский не у всех есть
|
|||
17
andrewks
27.08.12
✎
09:25
|
(12) логика работы понятна, но ровно до момента вызова ЗаписьУзлов.Закрыть(); ;-)
|
|||
18
kai17
02.09.12
✎
22:02
|
(16) Ответ от разработчиков:
Экземпляр документа DOM, передаваемый в конструктор объекта ЗаписьУзловDOM, используется только для создания создаваемых в процессе записи узлов. Сами узлы не добавляются в документ. Сфомированный при записи фрагмент документа DOM доступен через свойство УзелDOM объекта ЗаписьУзловDOM. Если необходимо, его можно добавить к существующему элементу (или установив в качестве корневого) документа DOM, получив требуемую структуру документа. |
|||
19
andrewks
02.09.12
✎
22:06
|
(18) нифига не добавляется, пробовал уже.
|
|||
20
kai17
03.09.12
✎
09:06
|
(19) Заработало вот так :
Процедура КнопкаВыполнитьНажатие(Кнопка) ДокDOM = Новый ДокументDOM("http://metrics.org","Root"); // создание объекта ДОМ с корневым элементом ЗаписьУзлов = Новый ЗаписьУзловDOM; // создание объекта записи узлов DOM ЗаписьУзлов.Открыть(ДокDOM);// определение объекта DOM для записи . // добавление элемента (скопировано из справки пользователя) ЗаписьУзлов.ЗаписатьНачалоЭлемента("apple"); ЗаписьУзлов.ЗаписатьСоответствиеПространстваИмен("nsp", "http://metrics.org"); ЗаписьУзлов.ЗаписатьАтрибут("weight", "http://metrics.org", "12.5"); ЗаписьУзлов.ЗаписатьКонецЭлемента(); //ЗаписьУзлов.УзелDOM содержит верный документ DOM // ДокDOM не изменился ДокDOM.ЭлементДокумента.ДобавитьДочерний(ЗаписьУзлов.УзелDOM) ; // переносим изменения в документ DOM , добавляем к корневому элементу ЗаписьУзлов.Закрыть(); // после закрытия объекта все изменения сохранены в ДокDOM // вывод документа DOM в ХМЛ ЗаписьДом = Новый ЗаписьDOM; ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); ЗаписьДом.Записать(ДокDOM,ЗаписьXML); СтрокаXML = ЗаписьXML.Закрыть(); Сообщить(СтрокаXML) ; // ДокDOM содержит все необходимые значения КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |