Изменить текст файла XML
Проблема: в файле XML несколько элементов верхнего уровня. Из-за этого невозможно корректно прочитать файл XML в 1С.
Задача: устранить это, объединив все записи в один элемент первого уровня.
Вопрос: как это сделать ПРОГРАММНО? Как получить текст XML для последующего его изменения?
На скриншоте визуально объяснил суть вопроса.
Задача: устранить это, объединив все записи в один элемент первого уровня.
Вопрос: как это сделать ПРОГРАММНО? Как получить текст XML для последующего его изменения?
На скриншоте визуально объяснил суть вопроса.
Прикрепленные файлы:
По теме из базы знаний
- Заполнение «Приложения №2» к «Декларации налога на прибыль» из файла XML выгрузки справок НДФЛ для налоговой по коду дохода 1010 (отчетность за 2016г.)
- Декларации по формам 7 и 8 алкогольной продукции, перенос данных из Декларант-Алко, импорт данных из файлов XML форм 11,12,7,8
- Новичок новичку: как выгрузить/загрузить XML данные
- Изменение размера штампа электронной подписи (ЭП) в файле Docx
- Быстрая выгрузка в Excel с оформлением (числа, даты, колонтитулы, гиперссылки) через OpenXML
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(12) Это вы серьезно, не знаете как текстовые фалы читать?
лкДок = Новый ТекстовыйДокумент;
лкДок.Прочитать(...);
лкТекст = лкДок.ПолучитьТекст();
лкТекст = СтрЗаменить("ЧтоЗаменить", ""); //Всего одна команда замены
лкДок.УстановитьТекст(лкТекст);
лкДок.Записать(...);
Позиция = СтрНайти(СтрокаXML, "</ReportXML>");
ПодстрокаПоиска = Сред(СтрокаXML, Позиция);
Позиция = СтрНайти(ПодстрокаПоиска, "<ReportXML>");
ПодстрокаПоиска = Сред(ПодстрокаПоиска, 1, Позиция + 11);
СтрЗаменить(СтрокаXML, ПодстрокаПоиска, "");
Здесь СтрокаXML - содержимое вашего файла.
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(ИмяФайлаXML, "windows-1251");
СтрокаXML = Текст.ПолучитьТекст();
// дальше те строки, что я писал раньше
Текст.УстановитьТекст(СтрокаXML);
Текст.Записать(ИмяФайлаXML, "windows-1251");
Возможно кому-то понадобится полное решение данной задачи. Выложу здесь:
Процедура ПроверитьИИсправитьФайлXML(ИмяФайлаДанных);
// Так как в документе XML допускается только один элемент верхнего уровня, а наша "Загрузка.Онлайн" выдаёт нам иногда
// файлы с несколькими элементами верхнего уровня, будем эту проблему контролировать и исправлять
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(ИмяФайлаДанных, "windows-1251");
СтрокаXML = Текст.ПолучитьТекст();
ЧислоВхожденийКодировки = СтрЧислоВхождений(СтрокаXML, "<?xml version=""1.0"" encoding=""Windows-1251""?>");
ЧислоВхожденийReportXML = СтрЧислоВхождений(СтрокаXML, "<ReportXML>");
Если ЧислоВхожденийКодировки > 1 или ЧислоВхожденийReportXML > 1 тогда
// Убираем все <?xml version="1.0" encoding="Windows-1251"?>,
// Убираем все <ReportXML>,
// Убираем все </ReportXML>
СтрокаXML = СтрЗаменить(СтрокаXML, "<?xml version=""1.0"" encoding=""Windows-1251""?>", "");
СтрокаXML = СтрЗаменить(СтрокаXML, "<ReportXML>", "");
СтрокаXML = СтрЗаменить(СтрокаXML, "</ReportXML>", "");
// Приводим строку XML к каноническому виду (строка кодировки - начало элемента первого уровня - записи - конец элемента первого уровня)
СтрокаXML = "<?xml version=""1.0"" encoding=""Windows-1251""?>" + "<ReportXML>" + СтрокаXML + "</ReportXML>";
Текст.УстановитьТекст(СтрокаXML);
Текст.Записать(ИмяФайлаДанных, "windows-1251");
КонецЕсли;
КонецПроцедуры
Показать
(21) Даже не хочу =) Потому что я уже представил, как я заставляю этих разработчиков (а на них ещё надо выйти) изменить свой алгоритм выгрузки с сайта. Их программа не связана ни с 1С, ни даже с битрикс. Эту ошибку мне проще самому изменить здесь и сейчас за отдельную плату, чем проходить эти 9 кругов ада бюрократического согласования изменений, а потом ещё нести за это ответственность, причём бесплатно.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот