Java - 将命名的html实体转换为编号的xml实体

Dav*_*ple 7 html java xml parsing entities

我正在寻找将包含html命名实体的html块转换为符合xml的块,该块使用编号的xml实体,同时保留所有html标记元素.

这是通过测试说明的基本思想:

@Test
public void testEvalHtmlEntitiesToXmlEntities() {
    String input = "<a href=\"test.html\">link&nbsp;</a>";
    String expected = "<a href=\"test.html\">link&#160;</a>";
    String actual = SomeUtil.eval(input);
    Assert.assertEquals(expected, actual);
}
Run Code Online (Sandbox Code Playgroud)

是否有人知道提供此功能的类?我可以编写一个正则表达式来迭代非元素匹配并执行:

xlmString += StringEscapeUtils.escapeXml(StringEscapeUtils.unescapeHtml(htmlString));
Run Code Online (Sandbox Code Playgroud)

但希望有一种更简单的方法或已经提供此类的课程.

Pau*_*gas 3

您尝试过JTidy吗?

private String cleanData(String data) throws UnsupportedEncodingException {
    Tidy tidy = new Tidy();
    tidy.setInputEncoding("UTF-8");
    tidy.setOutputEncoding("UTF-8");
    tidy.setPrintBodyOnly(true); // only print the content
    tidy.setXmlOut(true); // to XML
    tidy.setSmartIndent(true); 
    ByteArrayInputStream inputStream = new ByteArrayInputStream(data.getBytes("UTF-8"));
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    tidy.parseDOM(inputStream, outputStream);
    return outputStream.toString("UTF-8");
}
Run Code Online (Sandbox Code Playgroud)

虽然我认为它会修复你的一些 HTML 代码,以防有问题。