解决方案所以这根本不是xml问题。我的xml转义正确完成,但是存在编码问题。所以我想与大家分享我的解决方案,我希望你觉得这很有用。
public static String entityEncode(String text) throws UnsupportedEncodingException {
String result = text;
if (result == null) {
return result;
}
byte ptext[] = result.getBytes("ISO-8859-1");
String value = new String(ptext, "UTF-8");
String temp = XMLStringUtil.escapeControlChrs(value);
return temp;
}
EXPLANATION 上面的xml函数适用于XML 1.0。我们接受给定的文本,将其转换为字节,因为String没有相关的编码。之后我们在" UTF-8" 中的字节之外创建一个新字符串。这也是为什么java只是告诉我字符引用错误&#,它无法识别出错的字符。现在我完成了编码并将其分配给 UTF-8 ,没有问题,xml转义正常进行!
编辑:如何在提供的字符串中打印出所有非法的xml字符?根据{{1}}参数?我遇到的问题是我不想逃避一切,因为它之后没有正确解码。所以现在,我只需要找出文本中的无效字符是什么。造成问题并且需要编码的o ..
我有以下错误消息:
StringEscapeUtils.escapeXml
它没有具体告诉我角色是什么问题。
我将原始的XML解析转换为xml文档然后再转换为xml文档。我进一步消毒以删除非法字符
ERROR: 'Character reference "&#'
ERROR: 'com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: Character reference "&#'
然而,它并没有将它们删除,因此我不确定如何解决这个问题。目前我有:
String xml10pattern = "[^"
+ "\u0009\r\n"
+ "\u0020-\uD7FF"
+ "\uE000-\uFFFD"
+ "\ud800\udc00-\udbff\udfff"
+ "]";
实体编码只使用标准的xml解析类来转义基于String temp = entityEncode(temp);
String legal = temp.replaceAll(xml10pattern , "");
item.setResponseBody(legal);
的字符XMLStringUtil.escapeControlChrs
并且只有其他转义,没有删除。但有些事情正在被遗漏。