СекцияCDATADOM

Типы · DOMCDATASection

Узел DOM - секция CDATA.

Полное описание, параметры и ограничения

СекцияCDATADOM (DOMCDATASection)

СекцияCDATADOM (DOMCDATASection)

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

Свойства:
URIПространстваИмен (NamespaceURI)
Атрибуты (Attributes)
БазовыйURI (BaseURI)
ДокументВладелец (OwnerDocument)
ДочерниеУзлы (ChildNodes)
ЗначениеУзла (NodeValue)
ИмяУзла (NodeName)
ЛокальноеИмя (LocalName)
ПервыйДочерний (FirstChild)
ПоследнийДочерний (LastChild)
ПредыдущийСоседний (PreviousSibling)
Префикс (Prefix)
РодительскийУзел (ParentNode)
СледующийСоседний (NextSibling)
ТекстовоеСодержимое (TextContent)
ТипУзла (NodeType)
Данные (Data)
Размер (Length)

Методы:
ВставитьПеред (InsertBefore)
ДобавитьДочерний (AppendChild)
ЕстьАтрибуты (HasAttributes)
ЕстьДочерниеУзлы (HasChildNodes)
ЗаменитьДочерний (ReplaceChild)
КлонироватьУзел (CloneNode)
НайтиURIПространстваИмен (LookupNamespaceURI)
НайтиПрефикс (LookupPrefix)
Нормализовать (Normalize)
ПолучитьПользовательскиеДанные (GetUserData)
ПространствоИменПоУмолчанию (IsDefaultNamespace)
СравнитьПозициюВДокументе (CompareDocumentPosition)
УдалитьДочерний (RemoveChild)
УзелИдентичен (IsSameNode)
УзелРавен (IsEqualNode)
УстановитьПользовательскиеДанные (SetUserData)
ВставитьДанные (InsertData)
ВыбратьДанные (SubstringData)
ДобавитьДанные (AppendData)
ЗаменитьДанные (ReplaceData)
УдалитьДанные (DeleteData)

Описание:

Узел DOM - секция CDATA.

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

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

См. также:
ДокументDOM, метод СоздатьСекциюCDATA

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

Доступен, начиная с версии 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С» и не аффилирован с ней.