Удаление пространств имен из XML файла, созданного на основе XDTO объекта

25.07.24

Разработка - Универсальные функции

Иногда при экспорте XML может потребоваться удалить атрибуты корневого узла, такие как: xmlns="xyz" xmlns:xs="xyz" xmlns:xsi="xyz". Предлагаю универсальное решение, которое в исключительном случае с точки зрения производительности можно применить и построчно, если выгрузка была произведена с явным указанием типа XML.
Функция XMLСтрокаБезПространствИмен(XMLСтрока)

    Текст = Новый ТекстовыйДокумент;
    Текст.УстановитьТекст(XMLСтрока);
    СтрокаСАтрибутами = Текст.ПолучитьСтроку(2);
    МассивПодстрок = СтрРазделить(СтрокаСАтрибутами, " ");
    УдалитьВсеВхожденияСтрокиИзМассива(МассивПодстрок, АтрибутПространстваИмен());
    СтрокаСАтрибутами = СтрСоединить(МассивПодстрок, " ");
    Текст.ЗаменитьСтроку(2, СтрокаСАтрибутами);
    
    Возврат Текст.ПолучитьТекст();

КонецФункции

Функция АтрибутПространстваИмен()
    
    Возврат "xmlns";

КонецФункции

Процедура УдалитьВсеВхожденияСтрокиИзМассива(Массив, Значение)
    
    КоличествоЭлементовКоллекции = Массив.Количество();
    
    Для ОбратныйИндекс = 1 По КоличествоЭлементовКоллекции Цикл
        
        Индекс = КоличествоЭлементовКоллекции - ОбратныйИндекс;
        
        Если СтрНайти(Массив[Индекс], Значение) > 0 Тогда
            
            Массив.Удалить(Индекс);
            
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры

 

Вступайте в нашу телеграмм-группу Инфостарт

XDTO XML Пространство имен Постобработка

См. также

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    5417    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    46343    dimanich70    83    

164

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    6851    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    57386    atdonya    31    

68

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    8618    ke.92@mail.ru    17    

68

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    22776    YA_418728146    8    

174
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kalyaka 1138 26.07.24 09:44 Сейчас в теме
Из статьи не понятно для чего может потребоваться удалить пространство имен. Какую задачу таким образом можно решить?
2. janit 39 02.08.24 10:56 Сейчас в теме
(1)
1) Когда на стороне приемника не принимают XML с пространством имен и требуют корневой узел без тегов.
2) Для оптимизации объема выгружаемых файлов, когда их действительно много
3. EvgeniiB 09.09.24 10:18 Сейчас в теме
4. Alex_Fm_Jpn 21.09.25 17:20 Сейчас в теме
режет крайний тэг у меня :
//СтрокаСАтрибутами = СтрСоединить(МассивПодстрок, " ");
СтрокаСАтрибутами = СтрСоединить(МассивПодстрок, "") + ">"
5. vppunctum 5 04.10.25 17:32 Сейчас в теме
Начиная с версии 8.3.23 для этих целей возможно применение функции платформы СтрНайтиПоРегулярномуВыражению()

ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML,ОбъектXDTO);
	
XML_Текст = ЗаписьXML.Закрыть();
	
	
РегВыражение = "xmlns="+Символ(34)+".*"+Символ(34); // xmlns=".*" 
	
ЗначениеНайдено = Истина;
	
Пока ЗначениеНайдено Цикл 
		
	РезультатПоиска = 	СтрНайтиПоРегулярномуВыражению(XML_Текст,РегВыражение,,,,истина,);
		
	Если РезультатПоиска.НачальнаяПозиция = 0 Тогда
	  ЗначениеНайдено = Ложь;
	Иначе                           
	  НайденнаяСтрока = Сред(XML_Текст,РезультатПоиска.НачальнаяПозиция, РезультатПоиска.Длина);
	  XML_Текст = СтрЗаменить(XML_Текст,НайденнаяСтрока,"");
	КонецЕсли;	
		
КонецЦикла;	
	
	
Возврат XML_Текст;
Показать
Для отправки сообщения требуется регистрация/авторизация