修复html中的未关闭标记或使用HTML解析器解析XSLT转换

时间:2013-03-04 14:35:28

标签: java html parsing xslt tags

我有一些HTML代码是XSLT转换的结果。 (XML-> HTML)

我想在结果HTML上运行另一个XSLT转换。 (HTML-> HTML)

我的问题是第一个转换可能会返回未关闭的标签,如“<img>”,这意味着我无法使用DocumentBuilder解析结果html,因为它使用SAXparser,当然我的html文件不是有效的在所有情况下都是xml。 (我得到一个例外,即必须关闭以下XY标签。)

我猜有两种解决方案。

  1. 通过关闭未关闭的标记来修复结果HTML。

  2. 使用某种HTML解析器获取有效的org.w3c.dom.Document并跳过像SAX这样的XML解析器。

  3. 我真的很想使用我用于第一次转换的相同方法,所以我更喜欢上面的解决方案之一,我找不到任何明显的第三方罐子可以提供帮助。 (虽然我看了。)所以基本上我想知道我的选择是什么,有没有解决这个问题的方法?

    非常感谢任何帮助。

3 个答案:

答案 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)

alt text TagSoup - Just Keep On Truckin' alt text

您可以使用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工具进行操作和转换。

此外,Taggle, a TagSoup in C++, available now

答案 2 :(得分:0)

您需要整理XML。试试这个库:

http://jtidy.sourceforge.net/