我有一些HTML代码是XSLT转换的结果。 (XML-> HTML)
我想在结果HTML上运行另一个XSLT转换。 (HTML-> HTML)
我的问题是第一个转换可能会返回未关闭的标签,如“<img>
”,这意味着我无法使用DocumentBuilder解析结果html,因为它使用SAXparser,当然我的html文件不是有效的在所有情况下都是xml。 (我得到一个例外,即必须关闭以下XY标签。)
我猜有两种解决方案。
通过关闭未关闭的标记来修复结果HTML。
使用某种HTML解析器获取有效的org.w3c.dom.Document并跳过像SAX这样的XML解析器。
我真的很想使用我用于第一次转换的相同方法,所以我更喜欢上面的解决方案之一,我找不到任何明显的第三方罐子可以提供帮助。 (虽然我看了。)所以基本上我想知道我的选择是什么,有没有解决这个问题的方法?
非常感谢任何帮助。
答案 0 :(得分:5)
您需要的是Jsoup : Java HTML Parser
。它具有输出整洁HTML的功能。
String html = "<p>The recurrence, in close succession <ul><li>list item 1</li><li>list item 2</li></ul> second part of thisssss";
String clean = Jsoup.clean(html, Whitelist.relaxed());
您也可以使用其他Whitelist。
答案 1 :(得分:4)
您可以使用TagSoup来确保所有文档格式正确。
...用Java编写的兼容SAX的解析器 而不是解析良好的形式 或有效的XML,按原样解析HTML 在野外发现:贫穷,讨厌和 野蛮的,虽然经常很远 短。
TagSoup是专为人们设计的 谁必须处理这些东西 一些理性的外表 应用设计。
提供SAX 接口,它允许标准的XML 即使是最糟糕的工具也适用 HTML。 TagSoup还包括一个 读取HTML的命令行处理器 文件,可以生成干净 HTML或格式良好的XML 接近XHTML。
如果您使用的是Saxon,you can make TagSoup your parser by adding the following option:
...您可以使用标准的Saxon
-x org.ccil.cowan.tagsoup.Parser
选项, 确保TagSoup打开后 你的Java类路径。
我用它来一次性解析和转换HTML文档,并发现它工作得很好。它将把文档读作格式良好的XHTML文档,可以通过XML工具进行操作和转换。
答案 2 :(得分:0)
您需要整理XML。试试这个库: