【问题标题】:Fix unclosed tags in html or parse with HTML parser for XSLT transformation修复 html 中未闭合的标签或使用 HTML 解析器进行解析以进行 XSLT 转换
【发布时间】:2023-03-27 03:02:01
【问题描述】:

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

任何帮助将不胜感激。

【问题讨论】:

  • jtidy.sourceforge.net 可以帮到你
  • HTML5 推荐的方法是选项 2。你很幸运。 Java 中有很多免费的 HTML 解析器,大多数都会创建一个与 org.w3c.dom.Document 兼容的 DOM。
  • 感谢大家的帮助,我测试了几乎所有的建议,它们似乎都是可行的。在我最终使用 nu.validator.htmlparser.dom.HtmlDocumentBuilder 类之后,它就像一个魅力。再次感谢。

标签: java html parsing xslt tags


【解决方案1】:

您需要的是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

【讨论】:

  • 没关系,但是需要两次解析和一次序列化才能将数据放入 XSLT 转换。应该可以通过单个解析来实现相同的目标。 Jsoup 可能可以做到这一点,但我不知道 Jsoup,其他一些 java HTML 解析器当然可以。
  • @Alohci 我认为无论您使用什么解析器,但您肯定需要一个解析器来修复HTML
  • 一个好的基于 Java 的 HTML 解析器可以在一次解析中直接从格式错误的标记转换为 org.w3c.dom.Document 兼容的 DOM(就像浏览器一样)。 validator.nu HTML parser 是可以的,我希望大多数其他流行的也可以。
  • @kaysush 解决方案对我有用,但在某些情况下删除一些表格标签。
  • 我正在使用 Jsoup,我有

    对此进行 jsoup 解析:

    有什么问题吗?
【解决方案2】:

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:

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

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

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

【讨论】:

  • 链接失效了!
【解决方案3】:

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

http://jtidy.sourceforge.net/

【讨论】:

    猜你喜欢
    • 2012-04-22
    • 2012-11-14
    • 2011-06-05
    • 2012-04-06
    • 2016-01-16
    • 2012-09-03
    • 2012-07-12
    • 2014-02-08
    • 1970-01-01
    相关资源
    最近更新 更多