Java在JAXB解析之前无法解决XML / HTML问题
谁能帮我?
在HTML / XML中:
数字字符引用通过其通用字符集/ Unicode代码点引用字符,并使用以下格式:
&#NNNN; 或&#x hhhh;
在使用JAXB解析器之前,我必须将这些引用unescape(转换为unicode)。
当我使用Apache StringEscapeUtils.unescapeXml()时& 和> 和< 没有转义,而且这不是我想要的,因为解析将会失败。
有没有只将&#nnnn转换为unicode的库? 但是,其余的不会让其他人失望?
例:
开始标记 Adam<> 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);
链接地址: http://www.djcxy.com/p/34917.html
上一篇: Java Unescaping XML/HTML before JAXB parsing doesn't work