我需要用Java解析HTML 4。 理想情况下,我想要一个与SAX兼容的实现。
我知道Java中有很多HTML解析器,然而,它们似乎都在执行“整理”。换句话说,他们将纠正格式错误的HTML。 我不想要这个。
我的要求是:
是否有符合这些要求的图书馆?
答案 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
了解更多信息