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

问题描述 投票:5回答:3

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

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

任何帮助将不胜感激。

java html parsing xslt tags
3个回答
4
投票

TagSoup - Just Keep On Truckin'

您可以使用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

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

我用它来一次性解析和转换HTML文档,并发现它工作得很好。它将把文档读作一个格式良好的XHTML文档,可以通过XML工具进行操作和转换。

还有,Taggle, a TagSoup in C++, available now


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


0
投票

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

http://jtidy.sourceforge.net/

© www.soinside.com 2019 - 2024. All rights reserved.