СекцияCDATADOM.ЗаменитьДанные

Методы · ReplaceData

Заменяет диапазон символьных данных.

Синтаксис

ЗаменитьДанные(<Смещение>, <Длина>, <Строка>)
Полное описание, параметры и ограничения

СекцияCDATADOM.ЗаменитьДанные (DOMCDATASection.ReplaceData)

СекцияCDATADOM (DOMCDATASection)

ЗаменитьДанные (ReplaceData)

Доступен, начиная с версии 8.1.

Синтаксис:
ЗаменитьДанные(<Смещение>, <Длина>, <Строка>)
Параметры:

<Смещение> (обязательный)
Тип: Число.
Смещение от начала символьных данных.

<Длина> (обязательный)
Тип: Число.
Длина замещаемых символьных данных.

<Строка> (обязательный)
Тип: Строка.
Строка, замещающая символьные данные.
Описание:

Заменяет диапазон символьных данных.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.

Примечание:
Причины вызова исключения:
смещение превышает размер символьных данных;

данный узел в режиме Только для чтения.

Использование в версии:

Доступен, начиная с версии 8.1.

Методическая информация

Практические примеры

Изменить текст CDATA и отличить его от XML-разметки

Создаём секцию со строкой A&B<C>. Операции выполняются над символами данных, а не над тегами XML.

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

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

Подготовка

  1. Документы и все узлы создаются в памяти на сервере. Внешние XML, DTD, сетевые схемы и файлы не загружаются.

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


Документ = Новый ДокументDOM("", "description");
Секция = Документ.СоздатьСекциюCDATA("A&B<C>");
Документ.ЭлементДокумента.ДобавитьДочерний(Секция);
Сообщить(Секция.Данные = "A&B<C>");
Сообщить(Секция.Размер = 6);
Сообщить(Секция.ВыбратьДанные(0, 3) = "A&B");
Секция.ВставитьДанные(0, "X");
Секция.ДобавитьДанные("!");
Сообщить(Секция.Данные = "XA&B<C>!");
Секция.ЗаменитьДанные(1, 3, "Книга");
Сообщить(Секция.Данные = "XКнига<C>!");
Секция.УдалитьДанные(0, 1);
Сообщить(Секция.Данные = "Книга<C>!");
Сообщить(Секция.ТекстовоеСодержимое = Секция.Данные);
Сообщить(Секция.ДокументВладелец = Документ);
Сообщить(Секция.РодительскийУзел = Документ.ЭлементДокумента);
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
Сериализатор = Новый ЗаписьDOM;
Сериализатор.Записать(Документ, Запись);
ТекстXML = Запись.Закрыть();
Сообщить(ТекстXML);

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

  1. СоздатьСекциюCDATA создаёт узел данных. Строка <C> внутри него не является дочерним XML-элементом.

  2. Смещения в методах символьных данных начинаются с 0, в отличие от привычного Сред(), где начало строки задаётся 1.

  3. Вставка, добавление, замена и удаление последовательно изменяют данные с указанными промежуточными проверками.

  4. ЗаписьDOM сериализует дерево через ЗаписьXML. Текст внутри CDATA не нужно самостоятельно экранировать как тег.

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

  1. Размер исходной строки равен 6, её первые три символа A&B.

  2. После четырёх изменений данные равны Книга<C>!; все контрольные сравнения Истина.

  3. В XML текст <C> находится в секции данных, а не представлен отдельным элементом C.

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

На фиксированной строке освоены операции символьных данных CDATA и их сериализация.

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

  1. Последовательность ]]> завершает CDATA: не вставляйте её в произвольный пользовательский текст без отдельного решения сериализации.

  2. CDATA не защищает от опасной интерпретации текста получателем и не является способом очистки HTML.

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

Изменить символьные данные текста, комментария и CDATA

У трёх разных видов узлов одинаковая модель символьных данных. Делаем определённую правку ABCDEF → ABCxyz!, проверяя смещения с нуля.

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

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

Подготовка

  1. Все три узла создаются с одинаковыми шестью ASCII-символами. Документ не читается из внешнего источника.

  2. Для первого запуска оставьте ASCII: так смещения прозрачны и не смешиваются с особенностями Unicode.


Документ = Новый ДокументDOM;
Узлы = Новый Массив;
Узлы.Добавить(Документ.СоздатьТекстовыйУзел("ABCDEF"));
Узлы.Добавить(Документ.СоздатьКомментарий("ABCDEF"));
Узлы.Добавить(Документ.СоздатьСекциюCDATA("ABCDEF"));
Для Каждого Узел Из Узлы Цикл
    Сообщить(Узел.Размер = 6);
    Сообщить(Узел.ВыбратьДанные(0, 3) = "ABC");
    Узел.ВставитьДанные(3, "-");
    Сообщить(Узел.Данные = "ABC-DEF");
    Узел.ДобавитьДанные("!");
    Узел.ЗаменитьДанные(4, 3, "xyz");
    Сообщить(Узел.Данные = "ABC-xyz!");
    Узел.УдалитьДанные(3, 1);
    Сообщить(Узел.Данные = "ABCxyz!");
    Сообщить(Узел.Размер = 7);
КонецЦикла;

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

  1. Создаём ТекстDOM, КомментарийDOM и СекцияCDATADOM, а не передаём неизвестный объект в универсальную функцию.

  2. Размер считает символьные данные; ВыбратьДанные(0,3) берёт первые три символа.

  3. Вставляем дефис на смещение 3, добавляем ! в конец. DEF теперь занимает позиции 4–6.

  4. Заменяем три символа с позиции 4 на xyz и удаляем один дефис с позиции 3.

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

  1. У каждого вида узла последовательность одинакова: ABC-DEF, ABC-xyz!, ABCxyz!.

  2. Конечный Размер равен 7, все сравнения — Истина.

  3. Проверьте смещение за пределами длины: метод должен вызвать ошибку, а не незаметно исправить индекс.

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

Три настоящих вида узлов обработаны одинаковым символьным контрактом с наблюдаемыми промежуточными результатами.

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

  1. Смещения DOM начинаются с нуля, в отличие от некоторых строковых функций 1С.

  2. Комментарий не может содержать запрещённую XML-последовательность --, а CDATA — завершающую последовательность ]]>. Здесь их нет.

  3. Текст, комментарий и CDATA сериализуются по-разному, даже когда их Данные совпадают.

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

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

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

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

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