Имя: Пароль:
1C
1С v8
Как убрать объявление типа в заголовке файла XML
,
0 travelekb
 
18.02.21
14:22
Добрый день.

Механизмом XDTO формирую XML, как можно убрать в заголовке указание типа?
<?xml version="1.0" encoding="UTF-8"?>
<catalog xmlns="https://www.myproject.ru/xdto_import"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">;

необходимо записывать в файл просто
<catalog>

Читал, что вроде нужно указать строгий тип - перепробовал все, не помогает.
1 d4rkmesa
 
18.02.21
14:32
(0) Первую строку убрать можно просто не вызывая ЗаписатьОбъявлениеXML() . Неймспейсы - только через костыли, перегоняя текст xml в текстовый документ и далее через СтрНайти и СтрЗаменить.
2 travelekb
 
18.02.21
14:34
(1) с первой строкой все ок, речь идет именно про xml namespace во второй строке, странно что типизация не помогает
3 d4rkmesa
 
18.02.21
14:40
(2) В типовых обычно вариация процедуры для этого:
// Удаляет пространство имен из файла.
//
// Параметры:
//   ИмяФайла - Строка - путь к файлу на диске;
//   ПространствоИмен - Строка - удаляемое пространство имен.
//
Процедура УдалитьПространствоИмен(ИмяФайла, ПространствоИмен)
    Текст = Новый ТекстовыйДокумент;
    Текст.Прочитать(ИмяФайла, КодировкаТекста.UTF8);
    СтрокаФайл = Текст.ПолучитьСтроку(2);
    СтрокаФайл = СтрЗаменить(СтрокаФайл, "xmlns=""" + ПространствоИмен
        + """", "");
    Текст.ЗаменитьСтроку(2, СтрокаФайл);
    ТекстДокумента = Текст.ПолучитьТекст();
    Текст = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8);
    Текст.Записать(ТекстДокумента);
    Текст.Закрыть();
КонецПроцедуры
4 travelekb
 
18.02.21
14:43
(3) кошмар конечно.
Спасибо, без костылей получается не обойтись.
5 d4rkmesa
 
18.02.21
14:45
(4) Ну, процедуру можно облагородить, не сохранять на диск, заполнять ТекстовыйДокумент через ТекстДок.УстановитьТекст(ЗаписьXML.Закрыть()); , а потом уже сохранять собственно текстовый документ.