【问题标题】:Parsing html with SAX parser使用 SAX 解析器解析 html
【发布时间】:2018-10-25 08:38:17
【问题描述】:

我正在尝试使用 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 执行此操作?
  • 不,只是想从 html 文件中获取正文内容,所以,我使用了它。还有其他解决办法吗?
  • 使用 SAX,您可以解析 XHTML,但我不确定它是否也可以解析 HTML(至少大多数 XML 解析器不能)。 HTML 不必是格式良好的 XML。

标签: java html parsing sax


【解决方案1】:

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

我使用过的好的解析器是NekoTagSoup。 Neko 是一个很好的全能解析器; TagSoup 特别旨在能够解析任何内容,无论格式如何。

【讨论】:

  • TagSoup 的特点在于,它基于 SAX,速度快如闪电,它解决了所有基本 SAX 阻塞问题,包括 <和>。它与 SAX 一样易于设置;处理程序方法是相同的——没有超出您已经知道的 SAX 的学习曲线。
【解决方案2】:

一般来说,您无法使用 XML 解析器解析 HTML:

  • HTML 的元素标签不需要在所有情况下都匹配。 (例如,&lt;p&gt; 标记不需要匹配的&lt;/p&gt; 标记。)这将导致 XML 解析器的终端消化不良。

  • 现实世界的 HTML 因不符合 HTML 规范而臭名昭著,更不用说与 XML 兼容的 HTML 子集了。

但是,如果您的输入文档是 XHTML,您应该理论上能够使用 XML 解析器,例如 SAX。您应该甚至能够根据 XHTML 模式验证文档。

【讨论】:

    【解决方案3】:

    请查看HtmlParser。通常 SAX 不是解析 html 的好方法。

    【讨论】:

    • SAX 始终是解析大量数据(例如 HTML)的好选择。尝试查看 TagSoup,它非常棒!
    猜你喜欢
    • 2012-08-27
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 2011-06-17
    • 2011-08-14
    • 2011-01-27
    • 2011-02-25
    • 2011-05-31
    相关资源
    最近更新 更多