Вход | Регистрация


Запись DOM в элемент XML

Запись DOM в элемент XML
Я
   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
 
 
   DrShad
 
1 - 05.06.18 - 15:20
для DOM нужен корневой элемент
   Tateossian
 
2 - 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;
...

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует