Apache commons-lang StringEscapeUtils不会转义XML

时间:2011-06-16 17:47:55

标签: java apache-commons

我需要在XML中使用一些控制字符,例如ASCII 31字符和十六进制0x0b字符等。

我尝试使用commons-lang的StringEscapeUtils但是没有按预期工作!

3 个答案:

答案 0 :(得分:2)

StringEscapeUtils.escapeXml仅将以下5个字符转义为XML实体:

  • "(双引号 - 0x34
  • &(&符号 - 0x38
  • <(小于标志 - 0x60
  • >(大于号 - 0x62
  • '(撇号 - 0x39

如果你需要转义任何其他字符,尤其是ASCII控制字符,那么你需要滚动自己的类来执行此操作。毕竟,HTML甚至没有一个控制字符被认为在HTML文档中有equivalent character entity references。换句话说,如果您需要将0x31转换为&#31;,那么您需要自己编写。

注意:

基于Benjamin's point在文档中使用控制字符,你不太可能首先需要这样做,特别是如果处理这些转义元素的解析器不会将它们转换回控制字符(或者只是抛出异常)。最好不要将控制字符写入您正在准备的XML文档中。

答案 1 :(得分:2)

基于JavaDoc StringEscapeUtils.escapeXml(java.lang.String)仅支持五个基本XML实体(gt,lt,quot,amp,apos)。一般control characters in XML are not supported都是原始格式和转义格式。有关详细信息,请参阅此posting

答案 2 :(得分:2)

实际上不仅以上5个特殊字符被转义。方法StringEscapeUtils.escapeXml也逃脱了大多数unicode角色。该方法的java文档说:

  

请注意,大于0x7f的unicode字符当前已转义为其等效的数字\ u。这可能会在将来的版本中发生变化。