Имя: Пароль:
1C
 
Скопировать XML как?
0 lexushka
 
12.05.26
10:37
Добрый день
Поискал -- не нашел

Требуется получить копию XML

Имею

ИсточникXML = Новый ЧтениеXML();
ИсточникXML.ОткрытьФайл(Источник);
ИсточникXML.Прочитать();


И вот после этих строк хочу получить копию ИсточникXML

Ничего не меняя

Ожидал какого-нибудь оператор последовательного чтения и тут же записи строка в строку и получается такого нет?
1 NorthWind
 
11.05.26
07:45
Ну в принципе это резонно, ЧтениеXML умеет только последовательно читать. Нужно завести еще ЗаписьXML  и написать цикл, записывая всё, что вычитал. Или покурить ДокументDOM (кажется, так это называется) - вот там реально создается копия документа в памяти, как объекта. Правда, для больших XMLей это бо-бо.
2 Fedor-1971
 
11.05.26
09:08
(0) Посмотри в сторону ИсточникXML.Строка (или как-то так) - это строка прочитанного XML.
Дальше делаешь ИсточникXML2.УстановитьСтроку() и Прочитать()
3 Сергиус
 
11.05.26
13:49
(0)Может есть смысл скопировать файл-источник и уже с ним работать?
4 Chameleon1980
 
11.05.26
15:41
(0)КопироватьФайл
5 Dzenn
 
гуру
11.05.26
15:43
просто прочитай два раза в две переменных и всё. Или, ты изначально выбрал неверный способ реализации своей задумки.
6 Dzenn
 
гуру
11.05.26
15:44
в чём задумка?
7 sikuda
 
11.05.26
17:03
(6) Задумка сделать утилиту для чтения больших XML файлов или поиска по нему?
https://github.com/sikudaPy/bigxmlread/releases/tag/bigxmlreader
8 trooba
 
12.05.26
10:08
(0) Вот. И не лохмать бабушку
9 sikuda
 
12.05.26
11:09
(8) Зачем поток если само ЧтениеXML работает как буфер чтения?
Другое дело когда ЧтениеXML читает данные из потока.
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл("C:\temp\data.xml"); // Укажите путь к файлу

// Читаем по очереди
Пока Чтение.Прочитать() Цикл
    // Проверяем тип узла
    Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
    ...
    КонецЕсли;
КонецЦикла;

SAX (англ. «Simple API for XML») — способ последовательного чтения/записи XML-файлов.
10 Garykom
 
гуру
12.05.26
12:22
(0) Может еще хочешь получить копию ВыборкаИзРезультатаЗапроса?

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

"И вот после этих строк хочу получить копию Выборка"
11 Garykom
 
гуру
12.05.26
12:23
(10)+ Хотя еще Выборка.Следующий() забыл...
12 Timon1405
 
12.05.26
12:34
(10) зачем именно копию выборки?
можно обойти выборку и вызвать метод Выборка.Сбросить()
13 Garykom
 
гуру
12.05.26
12:40
(12) Это был намек что ТС хочет аналогичного но для последовательного чтения XML
Там тоже никто не мешает обойти и "сбросить"
Через вызов ПервоеОбъявление() или снова ОткрытьФайл()
14 АгентБезопасной Нацио
 
12.05.26
14:42
(12) может быть "клюшечное наследие" - типа обходить ТЗ двумя индексами...
15 Garykom
 
гуру
12.05.26
14:51
(14) Есть смысл в таком когда много вложенных
Для быстрого возврата в следующий самый верхний элемент, когда поняли что ветка не та
16 Галахад
 
гуру
12.05.26
15:16
(10) Вроде без проблем:

Владелец = Выборка.Владелец();
ВыборкаКопия = Владелец.Выбрать();
17 Garykom
 
гуру
12.05.26
15:29
(16) И чем отличается от (13) ?
Новая переменная и заново читаем файл и все
18 ptiz
 
12.05.26
19:21
(0) Если месье хочет извращений:

	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.ОткрытьФайл(ИмяИсходногоФайла);
	
	ПостроительDOM = Новый ПостроительDOM;
	ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);


	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();
	
	ЗаписьDOM = Новый ЗаписьDOM;
	ЗаписьDOM.Записать(ДокументDOM, ЗаписьXML);
	
	Стр = ЗаписьXML.Закрыть();

	ЧтениеXML2 = Новый ЧтениеXML;
	ЧтениеXML2.УстановитьСтроку(Стр);
19 sikuda
 
13.05.26
10:53
(18) Если извращения то красивые и оптимизированные для записи больших данных:

Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл("C:\temp\data.xml");
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("c:\docs\data.xml", "UTF-8", Истина);
Пока Чтение.Прочитать() Цикл
    ЗаписьXML.ЗаписатьТекущий(ЧтениеXML); 
КонецЦикла;
ЗаписьXML.Закрыть();
20 Garykom
 
гуру
13.05.26
11:27
(19) А через ОткрытьПоток не красивей будет?
21 Волшебник
 
13.05.26
12:31
Ребята, вы чокнулись?
КопироватьФайл
22 sikuda
 
13.05.26
12:58
(20) Будет интересней когда в 1С появятся асинхронные потоки типа Kotlin Flow, а пока только для будущих усовершенствований (я думаю уже на 1С Элементе).
(21)🔥
КопироватьФайл()?
НачатьКопированиеФайла()?
КопироватьФайлАсинх()?
23 Fedor-1971
 
13.05.26
12:50
(21) зачем копировать файл? просто прочитать в строку и два раза вгрузить в разные ЧтениеXML

Строка = ЧтениеТекста.Прочитать();
ИсточникXML.УстановитьСтроку(Строка);
ИсточникXML2.УстановитьСтроку(строка);
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн