任何人都可以帮助我吗?
在HTML / XML中:
数字字符引用通过其通用字符集/ Unicode代码点引用字符,并使用以下格式:
&安培;为#nnnn; 要么 & #x hhhh;
在使用JAXB解析器之前,我必须unescape(转换为unicode)这些引用。
当我使用Apache StringEscapeUtils.unescapeXml()时,& amp; 和& gt; 和& lt; 未转义,这不是我想要的,因为解析会失败。
是否有只将& #nnnn转换为unicode的库?但是不会忘掉其余部分吗?
示例:
开始标记 Adam& lt;& gt; Sl.meer 4& 5��的结束标签
我在&#之后添加了空格,否则你没有看到符号。
现在我像这样修理它,但我想使用更好的解决方案。
String unEncapedString = StringEscapeUtils.unescapeXml(xmlData).replaceAll("&", "&")
.replaceAll("<>", "<>");
StringReader reader = new StringReader(unEncapedString.codePoints().filter(c -> isValidXMLChar(c))
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append).toString());
return (Xxxx) createUnmarshaller().unmarshal(reader);
查看Apache Commons文本库,最后找到解决方案:
NumericEntityUnescaper numericEntityUnescaper = new NumericEntityUnescaper(
NumericEntityUnescaper.OPTION.semiColonRequired);
xmlData = numericEntityUnescaper.translate(xmlData);