是否有一个用Java实现的验证HTML解析器?

时间:2009-05-24 17:45:49

标签: java html xhtml

我需要用Java解析HTML 4。 理想情况下,我想要一个与SAX兼容的实现。

我知道Java中有很多HTML解析器,然而,它们似乎都在执行“整理”。换句话说,他们将纠正格式错误的HTML。 我不想要这个

我的要求是:

  1. 没有整理。
  2. 如果输入文档无效,HTML解析应该失败。
  3. 该文档应该可以对HTML DTD进行验证。
  4. 解析器可以生成SAX2事件。
  5. 是否有符合这些要求的图书馆?

4 个答案:

答案 0 :(得分:2)

您可以在此处找到一组HTML解析器HTML Parsers。我不记得确切,但我认为TagSoup解析文件而不应用更正......

答案 1 :(得分:2)

我认为Jericho HTML Parser可以提供至少一个核心要求('如果输入文档无效,HTML解析应该失败。')因为它至少会告诉你如果标签不匹配或其他有毒HTML漏洞,您可以根据此信息选择失败。

尝试在此Jericho格式化演示中键入无效的html,并注意页面底部的“Parser Log”:

http://jerichohtmlparser.appspot.com/samples/FormatSource.jsp

所以是的,这个 正在进行标签整理,但它至少告诉你 - 你可以通过设置net.htmlparser.jericho来获取这些信息。您的源上记录器(例如WriterLogger或您自己创建的更具体的东西),然后根据记录的错误继续进行。这是一个小例子:

    Source source=new Source("<a>I forgot to close my link!");
    source.setLogger(myListeningLogger);

    source.getSourceFormatter().writeTo(new NullWriter());
    // myListeningLogger has now had all the HTML flaws written to it

在上面的示例中,使用字符串:'StartTag at (r1,c1,p0) missing required end tag'调用记录器的info()方法,该字符串相对可解析,并且您始终可以决定拒绝任何记录任何比调试更糟糕的消息的HTML - 事实上,杰里科几乎将所有错误记录为“信息”级别,其中一对处于“警告”级别(您可能会想要创建一个小型分叉,其严格程度经过调整以符合您所关注的内容)。

耶利哥可以在Maven Central上找到,这总是一个好兆头:

http://mvnrepository.com/artifact/net.htmlparser.jericho/jericho-html

祝你好运!

答案 2 :(得分:1)

您可以查看http://lobobrowser.org/cobra.jsp。他们实现了纯Java Web浏览器(Lobo)。他们将解析器组件(Cobra)分别拉出来使用。老实说,我不确定它是否会按照“不整理”的要求做你所需要的,但它可能值得一看。我在探索纯粹的Java Web浏览器时遇到了它。

答案 3 :(得分:0)

您可以尝试继承javax.swing.text.html.parser.Parser并实现handleXXX()方法。它似乎并没有尝试修复XML。请点击the API

了解更多信息