将文本文件的内容传递到Jsoup并不会解析所有的html

时间:2017-07-17 12:00:06

标签: java jsoup html-parsing

我有一个文本文件“Data3.txt”。这个文件包含很多html。

我将此文件传递给Jsoup,以便使用此示例解析所有html:“Jsoup : How to parse multiple HTML files from local drive?”。

我也打印出文档的内容,以确保它具有所有的html init。

但是文档只包含html的一小部分(html,head,script,body标签)。我究竟做错了什么?我如何传递所有的HTML

这是我的代码:

cameraLayout

我的Data3.txt文件:https://www.dropbox.com/s/83slaan4hmtzr9n/Data3.txt?dl=0

1 个答案:

答案 0 :(得分:2)

原因

发生在你身上的原因是Jsoup.parse()方法默认使用Parser.htmlParser()。根据{{​​1}}方法文档:

  

创建一个新的HTML解析器。此解析器将输入视为HTML5,并基于对传入标记的语义的了解强制创建规范化文档。

您的输入文件不包含有效且严格的HTML5。有效且严格的HTML5代码的要求之一是将所有HTML标记缩小。输入文件中的标记是大写的,因此默认解析器会跳过它们。

解决方案

您可以做两件事:

  1. 更正输入文件,使其成为HTML5投诉。
  2. 请改用Parser.xmlParser(),例如使用以下方法:

    Parser.htmlParser()

    https://jsoup.org/apidocs/org/jsoup/Jsoup.html#parse-java.io.InputStream-java.lang.String-java.lang.String-org.jsoup.parser.Parser-

    XmlParser将每个标记视为正确的标记,因此您必须注意切换到XmlParser意味着您的HTML代码不会被解析器验证。它旨在与XML文件一起使用,但它可以帮助您解决问题。

    当然,它需要使用Document document = Jsoup.parse(InputStream in, String charsetName, String baseUri, Parser parser); 代替InputStream,但可以轻松地将一个转换为另一个,例如File