Показываем точную позицию управляющего символа в известном учебном тексте, чтобы не маскировать повреждение исходных данных.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Все исходные строки заданы прямо в примере; товары, файлы и настройки рабочих конфигураций не нужны.
Выполняйте на сервере учебной базы. Особенно важно для встроенных функций регулярных выражений.
Текст = "Книга" + Символ(1) + ": 3";
Позиция = НайтиНедопустимыеСимволыXML(Текст);
Если Позиция > 0 Тогда
Сообщить(СтрШаблон("XML отклонён: недопустимый символ на позиции %1, код %2", Позиция, КодСимвола(Текст, Позиция)));
Иначе
Сообщить("По этой проверке запрещённых символов XML нет");
КонецЕсли;
Исправленный = "Книга: 3";
Сообщить(НайтиНедопустимыеСимволыXML(Исправленный) = 0);Разбор по шагам
Символ(1) создаёт известный управляющий символ внутри текста; это не обычная буква или пробел.
НайтиНедопустимыеСимволыXML возвращает позицию первого недопустимого символа либо 0.
КодСимвола помогает диагностировать невидимый символ, не печатая его в сообщении.
Исправленный учебный текст задаём отдельно; автоматически не удаляем данные внешнего источника.
Как проверить результат
У исходного текста позиция 6 и код символа 1.
Проверка исправленного текста даёт Истина.
Обычные < и & сами по себе не делают эту проверку полной: их экранирует ЗаписьXML при записи текста элемента.
Ожидаемый результат
Место повреждения текста найдено до попытки сериализовать его в XML.
На что обратить внимание
Удаление управляющих символов может изменить идентификатор или содержимое документа — исправление должно соответствовать контракту.
Эта функция не проверяет XML-схему, корректность тегов или обязательные поля документа.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.