|
Скопировать 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.УстановитьСтроку(строка); |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |