Прежде всего я хочу упомянуть, что это не дубликат Как разобрать недопустимый (плохой / не правильно сформированный) XML? , потому что у меня нет заданного недопустимого (или не очень хорошо)-formed) XML-файл, а точнее произвольная Java String
, которая может содержать или не содержать недопустимый символ XML. Я хочу создать DOM Document
, содержащий узел Text
с указанным String
, а затем преобразовать его в файл. Когда файл анализируется в DOM Document
, я хочу получить String
, который равен начальному заданному String
. Я создаю Text
узел с org.w3c.dom.Document#createTextNode(String data)
и получаю String с org.w3c.dom.Node#getTextContent()
.
Как вы можете видеть в https://stackoverflow.com/a/28152666/3882565, есть несколько недопустимых символов для Text
узлов вXML-файлНа самом деле есть два разных типа «недопустимых» символов для Text
узлов. Существуют предопределенные объекты, такие как "
, &
, '
, <
и >
, которые автоматически экранируются DOM API с помощью "
, &
, '
, <
и>
в результирующем файле, который отменяется API DOM при анализе файла. Теперь проблема в том, что это не относится к другим недопустимым символам, таким как '\u0000'
или '\uffff'
. При синтаксическом анализе файла возникает исключительная ситуация, поскольку '\u0000'
и '\uffff'
являются недопустимыми символами.
Возможно, мне нужно реализовать метод, который экранирует эти символы в данном String
уникальным способом, прежде чем отправлять его вAPI DOM и отмените это позже, когда я верну String
, верно? Есть лучший способ это сделать? Кто-то реализовывал эти или подобные методы в прошлом?
Редактировать: Этот вопрос был помечен как дубликат Лучший способ кодировать текстовые данные для XML в Java? . Теперь я прочитал все ответы, но ни один из них не решил мою проблему. Все ответы предполагают:
- Использование библиотеки XML, такой как DOM API, которую я уже делаю, и ни одна из этих библиотек фактически не заменяет недопустимые символы, кроме
"
, &
, '
,<
, >
и еще несколько. - Замена всех недопустимых символов на
"&#number;"
, что приводит к исключению для недопустимых символов, таких как "�"
при разборе файла. - Использование сторонней библиотеки с методом кодирования XML, который не поддерживает недопустимые символы, такие как
"�"
(они пропускаются в некоторых библиотеках). - Использование раздела CDATA, который также не поддерживает недопустимые символы.