Единственный подходящий способ сделать этот XML-безопасный - это добавить свою собственную кодировку.
Вы можете сделать одну из этих двух (например):
- Сохранить все данныев качестве текстовых данных и замените все запрещенные символы каким-либо механизмом экранирования Unicode (кроме того, который определен в самом XML!).Например, вы можете использовать тот, который используется в Java:
\u0001
для U + 0001. или - сохраните данные в виде двоичных данных и используйте base64Binary из hexBinary для хранения ваших данных в XML.
Оба этих подходов нуждаются в явной поддержке как потребителя , так и производителя.Второй подход имеет преимущество использования четко определенных типов данных с широкой поддержкой, но если ваш контент на самом деле является текстовым, вам нужно указать (или сообщить) кодировку, используемую в потоке байтов (необходимость, которая в противном случае отрицается самим XML).).
Если удалить все непередаваемые символы , то это регулярное выражение должно выполнить трюк:
Pattern XML_INVALID_CHARS = Pattern.compile("[^\u0009\n\r\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF ]+");
String xmlSafe = XML_INVALID_CHARS.matcher(input).replaceAll("");
Обратите внимание, чтоспецификация предлагает , чтобы авторы документов были еще более строгими с набором символов, разрешенных в заметке.Это регулярное выражение будет немного длиннее.