代码之家  ›  专栏  ›  技术社区  ›  johnstok

在Java中是否有验证的HTML解析器?

  •  4
  • johnstok  · 技术社区  · 16 年前

    我需要在Java中解析HTML 4。 理想情况下,我希望实现与sax兼容。

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

    我的要求是:

    1. 没有整理。
    2. 如果输入文档无效,则HTML解析将失败。
    3. 文档应该可以根据htmldtd进行验证。
    4. 解析器可以产生SAX2事件。

    有符合这些要求的图书馆吗?

    4 回复  |  直到 8 年前
        1
  •  2
  •   adrian.tarau    16 年前

    你可以在这里找到HTML解析器的集合 HTML Parsers . 我不太记得了,但我认为tagsoup解析文件时没有应用更正…

        2
  •  2
  •   Paul    8 年前

    我认为 Jericho HTML Parser 可以提供至少一个核心需求(如果输入文档无效,HTML解析应该失败)。 告诉 如果有不匹配的标签或其他有害的HTML缺陷,您可以根据此信息选择失败。

    尝试在这个jericho格式演示中键入无效的html,并注意页面底部的“解析器日志”:

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

    是的,这个 做标签整理,但至少 告诉 你可以通过设置NET.HTMLPARSer.JeijHo.Logg来获取这些信息(例如 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
    

    在上面的示例中,使用字符串调用记录器的info()方法:' StartTag at (r1,c1,p0) missing required end tag 它是相对可解析的,并且你总是可以决定拒绝任何比调试更坏的消息的HTML。事实上,耶利哥城将几乎所有的错误记录为“信息”级别,在“警告”级别上有一对夫妇(你可能想要创建一个小的叉,调整了相应的严重性。对你关心的事情)。

    杰里科位于马文中心,这是个好兆头:

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

    祝你好运!

        3
  •  1
  •   monceaux    16 年前

    你可以检查一下 http://lobobrowser.org/cobra.jsp 。他们有一个纯Java Web浏览器(LoBO)实现。它们分别提取了解析器组件(cobra)以供使用。老实说,我不确定它是否能满足您的“不整理”要求,但它可能值得一看。当我在野外探索纯Java网页浏览器时,我跑过去了。

        4
  •  0
  •   David Rabinowitz    16 年前

    您可以尝试对JavaX.SWIG.T.HTML.PARSer.PARSE进行子类实现并实现HouxXXX()方法。它似乎没有试图修复xml。更多见 the API