使用SAX解析器解析HTML

8

我正在尝试使用SAX解析器解析普通的HTML文件。

SAXBuilder builder2 = new SAXBuilder();
         try {
            Document sdoc = (Document)builder2.build(readFile);
            NodeList nl=sdoc.getElementsByTagName("body");
            System.out.println("nodelist>>>>>>>>>>>"+nl.getLength());

        } catch (JDOMException e1) {
            e1.printStackTrace();
        }

但是我遇到了异常。
Open quote is expected for attribute "{1}" associated with an  element type  "class".

请问为什么我会遇到这个异常?HTML文档格式正确,所有标签都是完整的。

谢谢!


你想用SAX做这件事情有特别的原因吗? - flash
不,我只想从HTML文件中获取正文内容,所以我使用了它。还有其他解决方案吗? - user972590
1
使用SAX,你可以解析XHTML,但我不确定它是否也可以解析HTML(至少大多数XML解析器不行)。 HTML不一定是规范的XML。 - Mister Smith
4个回答

6

正如flash所说,你需要一个HTML解析器,而不是XML解析器。 HTML不是XML。

我用过的好解析器有NekoTagSoup。 Neko是一个很好的全能解析器; TagSoup专门旨在能够解析任何格式,无论多么不规范。


1
关于TagSoup的事情是,它基于SAX,速度非常快,并且解决了所有基本SAX无法处理的问题,包括<和>。它与SAX一样容易设置;处理程序方法只是相同的方法--除了您已经知道的SAX之外,没有学习曲线。 - Russ Bateman

4

一般来说,你不能使用XML解析器来解析HTML:

  • HTML元素标签不需要在所有情况下匹配。(例如,<p>标签不需要与</p>标签匹配。)这会导致XML解析器出现终端消化不良的问题。

  • 现实世界中的HTML以不符合HTML规范而闻名,更不用说HTML的XML兼容子集了。

然而,如果你的输入文档是XHTML,你理论上就可以使用像SAX这样的XML解析器。你甚至可以对文档进行XHTML模式的验证。


2
请查看HtmlParser。通常使用SAX解析html不是很好的解决方案。

4
SAX是解析大量数据(如HTML)的好选择。尝试使用TagSoup,它非常适合这种用途! - slott

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接