|
Запись DOM в элемент XML | ☑ | ||
---|---|---|---|---|
0
Tateossian
05.06.18
✎
14:29
|
Всем привет! Есть такой кусок кода:
Поток = Новый ПотокВПамяти; Запись = Новый ЗаписьXML; Запись.ОткрытьПоток(Поток, "UTF-8", Ложь); Запись.ЗаписатьОбъявлениеXML(); Запись.ЗаписатьНачалоЭлемента("_1CV8DtUD", "http://www.1c.ru/V8/1CV8DtUD/"); Запись.ЗаписатьСоответствиеПространстваИмен("V8Exch", "http://www.1c.ru/V8/1CV8DtUD/"); Запись.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); Запись.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/data"); Запись.ЗаписатьНачалоЭлемента("V8Exch:Data"); Это из типовой обработки выгрузки-загрузки данных. Задача в том, чтобы в Элемент <V8Exch:Data> записать целиком DOM, который представляет собой сериализованный объект CatalogObject или DocumentObject. Как это можно сделать кратчайшим способом, чтобы не обходить все дочерние узлы рекурсивно? Вот так не дает: ЗаписьXML = Новый ЗаписьXML(); ЗаписьXML.УстановитьСтроку(); СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ЭлементМассива); СтрокаXML = ЗаписьXML.Закрыть(); ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(СтрокаXML); ПостроительDOM = Новый ПостроительDOM; ДокументDOMШаблон = ПостроительDOM.Прочитать(ЧтениеXML); ЗаписьDOM = Новый ЗаписьDOM; ЗаписьDOM.Записать(ДокументDOMШаблон, Запись); --> Ошибка при вызове метода контекста (Записать): Ошибочный порядок записи XML |
|||
1
DrShad
05.06.18
✎
15:20
|
для DOM нужен корневой элемент
|
|||
2
Tateossian
05.06.18
✎
18:57
|
Проблема решена. Для потомков:
Выборка = ПланыОбмена.ВыбратьИзменения(Узел, 0); МассивОбъектов = Новый Массив; Пока Выборка.Следующий() Цикл МассивОбъектов.Добавить(Выборка.Получить()); КонецЦикла; Поток = Новый ПотокВПамяти; Запись = Новый ЗаписьXML; Запись.ОткрытьПоток(Поток, "UTF-8", Ложь); Запись.ЗаписатьОбъявлениеXML(); Запись.ЗаписатьНачалоЭлемента("_1CV8DtUD", "http://www.1c.ru/V8/1CV8DtUD/"); Запись.ЗаписатьСоответствиеПространстваИмен("V8Exch", "http://www.1c.ru/V8/1CV8DtUD/"); Запись.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); Запись.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/data"); Запись.ЗаписатьНачалоЭлемента("V8Exch:Data"); Конвертор = Новый ПреобразованиеККаноническомуXML; Для Каждого ЭлементМассива Из МассивОбъектов Цикл Если Не ТипЗнч(ЭлементМассива) = Тип("ДокументОбъект.ЗаказПокупателя") Тогда Продолжить; КонецЕсли; ЗаписьXML = Новый ЗаписьXML(); ЗаписьXML.УстановитьСтроку(); СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ЭлементМассива); СтрокаXML = ЗаписьXML.Закрыть(); ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(СтрокаXML); ПостроительDOM = Новый ПостроительDOM; ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML); // дополнительные данные, которых нет в сериализуемом (стандартно) объекте ВесБрутто = МодульДоработокСервер.РассчитатьВесВДокументеБруттоИтого(Неопределено, Неопределено, ЭлементМассива); ЭлементDOM = ДокументDOM.СоздатьЭлемент("ВесБрутто"); ЭлементDOM.ТекстовоеСодержимое = XMLСтрока(ВесБрутто); ДокументDOM.ЭлементДокумента.ДобавитьДочерний(ЭлементDOM); СтрокаПотокаШаблона = Конвертор.КанонизироватьВСтроку(ДокументDOM); Запись.ЗаписатьБезОбработки(СтрокаПотокаШаблона); КонецЦикла; Запись.ЗаписатьКонецЭлемента(); //V8Exc:Data Запись.ЗаписатьКонецЭлемента(); //V8Exc:_1CV8DtUD Запись.Закрыть(); СтрокаРезультат = ПолучитьСтрокуИзДвоичныхДанных(Поток.ЗакрытьИПолучитьДвоичныеДанные(), "UTF-8"); ПреобразованиеXSL = Новый ПреобразованиеXSL; ... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |