【问题标题】:HTML parsing using DOM-Java使用 DOM-Java 进行 HTML 解析
【发布时间】:2015-11-03 11:10:54
【问题描述】:

我想使用 Java 解析一个 HTML 文件,并且我使用了 DocumentBuilder 类。我的 HTML 包含一个 <img src="xyz"> 标记,没有关闭 </img> 标记,这在浏览器中是允许的。但是当我将它交给 DocumentBuilder 进行解析时,它给了我这个错误

元素类型“img”必须由匹配的结束标签终止 </img>.

Java:

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document document = docBuilder.parse(is);

我应该怎么做才能摆脱这个错误?

【问题讨论】:

  • The element type "img" must be terminated by the matching end-tag "</img>". 您可能需要有效的 html 来解析它。所有标签必须有结束部分,或至少定义为<img src="xyz" />
  • HTML 不是 XML 并且不受相同的验证
  • @Jakuje 但没有结束标记的 是有效的 html。例如:w3schools.com/tags/tryit.asp?filename=tryhtml_image_test
  • libxml2 没有这个问题。它对官方规则闭嘴,只解析 HTML,受不同级别的验证...

标签: java html dom


【解决方案1】:

DocumentBuilder 是 Java 的 XML 解析框架的一部分。 XML 解析器无法正确解析 HTML:这些语言看起来很相似,但 XML 有更严格的要求。 (您已经看到了其中一个区别:在 XML 中,所有标签都应该有一个匹配的结束标签,而在 HTML 中有些标签有,有些没有。)

尝试使用 HTML 解析器。我听说过关于jsoup (http://jsoup.org/) 的好消息。

【讨论】:

  • 谢谢,我会试试的。但是使用 jsoup 有什么缺点吗?
  • 我需要在 HTML 上运行 XPath 查询。就像(咳咳)Gnome 的 libxml2 可以做的那样......
【解决方案2】:

您也可以使用TagSoup 来解析HTML,就好像它是XML 一样,尽管这会给您SAX 而不是DOM。

【讨论】:

    猜你喜欢
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 2013-02-15
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多