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

Pet*_*zki 5 html java tags xslt parsing

我有一些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解析器.

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

任何帮助将不胜感激.

kay*_*ush 6

你需要的是什么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());
Run Code Online (Sandbox Code Playgroud)

你也可以使用其他白名单.


Mad*_*sen 4

替代文本TagSoup - 继续前进替代文本

您可以使用TagSoup来确保所有文档的格式都正确。

...一个用 Java 编写的符合 SAX 的解析器,它不是解析格式良好或有效的 XML,而是解析在野外发现的 HTML:糟糕、肮脏和粗鲁,尽管通常远非短小。

TagSoup 是为那些必须使用某种合理的应用程序设计来处理这些东西的人而设计的。

通过提供 SAX 接口,它允许将标准 XML 工具应用于甚至最差的 HTML。TagSoup 还包括一个命令行处理器,可以读取 HTML 文件并生成干净的 HTML 或格式良好的 XML(非常接近 XHTML)。

如果您使用 Saxon,您可以通过添加以下选项使 TagSoup 成为您的解析器

-x org.ccil.cowan.tagsoup.Parser...在确保 TagSoup 位于 Java 类路径上之后,您可以使用标准 Saxon选项。

我已经使用它一次性解析和转换 HTML 文档,并且发现它效果很好。它将文档作为格式良好的 XHTML 文档读取,可通过 XML 工具进行操作和转换。

此外,Taggle(C++ 语言的 TagSoup)现已推出