在JAXB解析之前,Java Unescaping XML / HTML并不起作用

时间:2018-02-05 08:33:04

标签: java xml unicode jaxb

任何人都可以帮助我吗?

在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("<>", "&lt;&gt;");
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);

0 个答案:

没有答案