Apache commons-lang StringEscapeUtils не экранирует XML - PullRequest
1 голос
/ 16 июня 2011

Мне нужно выделить некоторые управляющие символы в XML, например, символ ASCII 31, шестнадцатеричный символ 0x0b и другие.

Я пытался использовать StringEscapeUtils для commons-lang, но не работал должным образом!

Ответы [ 3 ]

2 голосов
/ 16 июня 2011

На основе JavaDoc StringEscapeUtils.escapeXml(java.lang.String) поддерживает только пять основных сущностей XML (gt, lt, quot, amp, apos). В общем случае управляющие символы в XML не поддерживаются как в необработанном, так и в экранированном формате. См. сообщение для получения дополнительной информации.

2 голосов
/ 09 марта 2012

На самом деле не только 5 специальных символов выше экранированы.Метод StringEscapeUtils.escapeXml также экранирует большинство символов Юникода.Документ Java для метода говорит, что:

Обратите внимание, что символы Юникода больше 0x7f в настоящее время экранированы в их числовом эквиваленте \ u.Это может измениться в будущих выпусках.

2 голосов
/ 16 июня 2011

StringEscapeUtils.escapeXml экранирует только следующие 5 символов в сущности XML:

  • " (двойная кавычка - 0x34)
  • & (амперсанд - 0x38)
  • < (знак меньше - 0x60)
  • > (знак больше - 0x62)
  • ' (апостроф - 0x39)

Если вам нужно экранировать любые другие символы, особенно управляющие символы ASCII, вам нужно будет бросить свой собственный класс, который выполняетэтот.В конце концов, ни один из управляющих символов даже не рассматривается в HTML как наличие эквивалентных ссылок на сущности символов в документе HTML.Другими словами, если вам нужно конвертировать 0x31 в &#31;, вам нужно будет написать это самостоятельно.

Примечание:

На основе Замечание Бенджамина об использовании управляющих символов в документе, маловероятно, что вам потребуется сделать это в первую очередь, особенно если анализатор, который обрабатывает эти экранированные элементы, не преобразует их обратно в управляющие символы (или простокинь исключение).Вам лучше не записывать управляющие символы в XML-документ, который вы готовите.

...