Создать XML товара без ручного экранирования

Учебные задачи

Название содержит амперсанд и знак меньше. ЗаписьXML правильно экранирует их, а ЧтениеXML восстанавливает исходный текст.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Выполняйте в серверной процедуре учебной обработки; файлы не создаются.

  2. Оставьте специальные символы в названии: именно на них проверяется безопасная запись.

Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
Попытка
    Запись.ЗаписатьОбъявлениеXML();
    Запись.ЗаписатьНачалоЭлемента("product");
    Запись.ЗаписатьАтрибут("code", "A-01");
    Запись.ЗаписатьНачалоАтрибута("quantity");
    Запись.ЗаписатьТекст("3");
    Запись.ЗаписатьКонецАтрибута();
    Запись.ЗаписатьНачалоЭлемента("name");
    Запись.ЗаписатьТекст("Книга & учебник <для новичка>");
    Запись.ЗаписатьКонецЭлемента();
    Запись.ЗаписатьКомментарий("Учебные данные");
    Запись.ЗаписатьКонецЭлемента();
    ТекстXML = Запись.Закрыть();
Исключение
    Запись.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Сообщить(ТекстXML);
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(ТекстXML);
Попытка
    Пока Чтение.Прочитать() Цикл
        Если Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
            Сообщить(Чтение.Значение);
        КонецЕсли;
    КонецЦикла;
Исключение
    Чтение.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();

Разбор по шагам

  1. УстановитьСтроку включает запись в память, ЗаписатьОбъявлениеXML добавляет объявление XML.

  2. Все атрибуты записываем до содержимого элемента; поэтапная запись quantity заканчивается КонецАтрибута.

  3. Для каждого НачалоЭлемента вызываем КонецЭлемента; Закрыть возвращает готовую строку.

  4. Читаем строку обратно и выводим значение текстового узла.

Как проверить результат

  1. В готовом XML амперсанд и знак меньше записаны как &amp; и &lt;.

  2. Читатель выводит ровно Книга & учебник <для новичка>, без строк &amp; или &lt;.

Ожидаемый результат

XML содержит product с кодом A-01, количеством 3 и исходным названием.

На что обратить внимание

  1. Не применяйте СтрЗаменить для экранирования перед ЗаписатьТекст: получится двойное экранирование.

  2. ЗаписатьБезОбработки предназначен для уже корректной XML-разметки, а не для внешнего названия товара.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.