Я бы сделал так:
Функция XMLУдалитьНедопустимыеСимволы(СтрокаXML, СимволЗамены = "") Экспорт
#Если НЕ ВебКлиент Тогда
Пока Истина Цикл
Позиция = НайтиНедопустимыеСимволыXML(СтрокаXML);
Если Позиция Тогда
Символ = Сред(СтрокаXML, Позиция, 1);
СтрокаXML = СтрЗаменить(СтрокаXML, Символ, СимволЗамены);
Иначе
Возврат СтрокаXML
КонецЕсли
КонецЦикла
#КонецЕсли
КонецФункции
Показать
Если одинаковых символов несколько - нет смысла гонять циклом, лучше удалять их все сразу.
В подавляющем большинстве случаев символ удаляем, поэтому функцию так и назовём.
А если вдруг нужно символ не удалять, а заменить, используем второй параметр.
П.С. с удивлением обнаружил в УПП функцию ОбщегоНазначенияКлиентСервер.УдалитьНедопустимыеСимволыXML, она поражает своей атмосферностью...
посмотреть |
---|
Функция ЗаменитьНедопустимыеСимволыXML(Знач Текст, СимволЗамены = " ") Экспорт
#Если НЕ ВебКлиент Тогда
ПозицияНачала = 1;
Пока Истина Цикл
Позиция = НайтиНедопустимыеСимволыXML(Текст, ПозицияНачала);
Если Позиция = 0 Тогда
Прервать;
КонецЕсли;
// Если возращается позиция, больше чем должна быть, то корректируем ее.
Если Позиция > 1 Тогда
НедопустимыйСимвол = Сред(Текст, Позиция - 1, 1);
Если НайтиНедопустимыеСимволыXML(НедопустимыйСимвол) > 0 Тогда
Текст = СтрЗаменить(Текст, НедопустимыйСимвол, СимволЗамены);
КонецЕсли;
КонецЕсли;
НедопустимыйСимвол = Сред(Текст, Позиция, 1);
Если НайтиНедопустимыеСимволыXML(НедопустимыйСимвол) > 0 Тогда
Текст = СтрЗаменить(Текст, НедопустимыйСимвол, СимволЗамены);
КонецЕсли;
ПозицияНачала = Позиция + 1;
КонецЦикла;
#КонецЕсли
Возврат Текст;
КонецФункции
Функция УдалитьНедопустимыеСимволыXML(Знач Текст) Экспорт
Возврат ЗаменитьНедопустимыеСимволыXML(Текст, "");
КонецФункции Показать |
позаимствовал оттуда #Если НЕ ВебКлиент (я так понимаю, добавили его не просто так ;)
и назвал свою чуть иначе, чтобы не вылетало с ошибкой