Имя: Пароль:
1C
 
ЗаписьXML несколько объектов
0 repin_mike
 
09.07.21
14:17
Ниже код, который любой сериализуемый объект записывает в XML.
Как нужно изменить код, чтобы можно было бы в один файл записать несколько объектов?

    ТекстФайл = Новый ЗаписьТекста("C:\a.xml", КодировкаТекста.UTF8);
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку();    
    ЗаписатьXML(ЗаписьXML, ЛюбойСериализуемыйОбъект);
    ТекстФайл.Записать(ЗаписьXML.Закрыть());
    ТекстФайл.Закрыть();
1 mikecool
 
09.07.21
14:21
цикл, например
а вообще - надо себя заставить
2 Вафель
 
09.07.21
14:23
+ корень нужно добавить
3 Kassern
 
09.07.21
14:23
(0) а зачем вообще запись текста делать, можно же сразу в xml писать. При закрыть он автоматом запишет файл.
4 Fragster
 
гуру
09.07.21
14:23
ЛюбойСериализуемыйОбъект может быть массивом
5 repin_mike
 
09.07.21
14:25
Насколько я прочитал справку, ЧтениеXML имеет метод Прочитать(), который возвращает истину или ложь в зависимости от того закончился текст или нет. Соответственно при записи, видимо, нужно как-то отделять записываемые объекты. Но как это сделать я не понял. По крайней мере, если записать два объекта, то так не работает

ЗаписатьXML(ЗаписьXML, ЛюбойСериализуемыйОбъект);
ЗаписатьXML(ЗаписьXML, ЛюбойСериализуемыйОбъект2);
ТекстФайл.Записать(ЗаписьXML.Закрыть());


А как правильно?
6 repin_mike
 
09.07.21
14:26
(4) По поводу массива понял, наверное сработает, но хочу понять как правильно
7 Fragster
 
гуру
09.07.21
14:26
(6) это будет нормально
8 Kassern
 
09.07.21
14:26
(3) типа
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\a.xml", "UTF-8", Истина);
тут заполняем тело
ЗаписьXML.Закрыть(); //тут как раз файлик запишется.
9 Fragster
 
гуру
09.07.21
14:26
(5) так будет правильно, если добавить в корень элемент руками, а потом при считывании его пропускать, что не так просто, как (4)
10 repin_mike
 
09.07.21
14:30
(8) Спасибо

(9)
МассивПрочитанныхОбъектов = Новый Массив;
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл("C:\a.xml");
Пока Чтение.Прочитать() Цикл
    Объект = ПрочитатьXML(Чтение);
    МассивПрочитанныхОбъектов.Вставить(Объект);
КонецЦикла;

Как записать, чтобы такой код прочитал все ранее записанные объекты?
11 repin_mike
 
09.07.21
14:31
(+10) Массив.Добавить(), но не важно
12 Kassern
 
09.07.21
14:36
(10) есть же куча пример чтения и записи xml. Загуглите, даже через фабрику есть пример чтения
13 repin_mike
 
09.07.21
14:41
(12) То есть то, что написано в (10) - неверно?
14 Kassern
 
09.07.21
14:48
(13) есть куча примеров, когда на выходе дерево значений, или массив структур/соответствий. Как тебе удобней, так и обрабатывай
15 ДедМорроз
 
09.07.21
19:16
Если мы хотим что-то сериализовать,то положите это что-то в структуру и сериализуйте сколько хочется.
Просто,согласно правилам xml корневой объект должен быть один.
16 youalex
 
09.07.21
20:33
(10) СериализаторXDTO.ЗаписатьXML() /ПрочитатьXML() - умеет в массивы и структуры.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn