5

我有一些 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 方罐子可以提供帮助。(虽然我看过。)所以基本上我想知道我在这里有什么选择,这个问题有什么解决方案吗?

任何帮助将不胜感激。

4

3 回答 3

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());

您也可以使用其他白名单

于 2013-03-04T14:44:14.587 回答
4

替代文字TagSoup - Just Keep On Truckin'替代文字

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

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

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

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

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

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

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

此外,C++ 中的 TagSoup Taggle 现已上市

于 2013-03-04T16:19:10.817 回答
0

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

http://jtidy.sourceforge.net/

于 2013-03-04T14:48:41.960 回答