1.环境表述:
pom.xml依赖版本号
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.2</version>
<!--<version>1.8.3</version>-->
</dependency>
2.解析方式:
Jsoup方式通过File解析
public static Document returnDocument(File file){
try {
Document document = Jsoup.parse(file, "UTF-8");
return document;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
Jsoup方式通过url解析, 比如百度链接
public static Document returnUrlDocument(String url){
try {
Document document = Jsoup.connect(url).post();
return document;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
Jsoup方式通过InputStream 流获取并保留大小写
public static Document returnDocumentInputStream(File file){
try {
//解析中保留大小写 start
Parser parser = Parser.htmlParser();
parser.settings(new ParseSettings(true, true));
//解析中保留大小写 end
InputStream input = new FileInputStream(file);
Document document = Jsoup.parse(input, "UTF-8", "", parser);
return document;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
Parser方式通过InputStream 流获取,并保留大小写
public static Document returnDocumentParser(File file){
try {
String fileString = FileUtils.readFileToString(file, getFileEncode(file.toString()));
//解析中保留大小写 start
Parser parser = Parser.htmlParser();
parser.settings(new ParseSettings(true, true));
//解析中保留大小写 end
InputStream input = new FileInputStream(file);
Document document = parser.parseInput(fileString, getFileEncode(file.toString()));
return document;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
3.保留大小写问题:
使用 jsoup ParseSettings保留大小写, HTML解析是默认为小写, XML解析保留大小写
//xml解析 默认保留大小写
Document doc = Jsoup.parse(xml, baseUrl, Parser.xmlParser());
//HTML解析
Parser parser = Parser.htmlParser();
parser.settings(new ParseSettings(true, true));
Document document = parser.parseInput(fileString, "UTF-8");
//或者
Parser parser = Parser.htmlParser();
parser.settings(new ParseSettings(true, true));
InputStream input = new FileInputStream(file);
Document document = Jsoup.parse(input, "UTF-8", "", parser);
4.转义字符问题:
4.1问题表述
表示空格
< 表示 <
> 表示 >
<script></script>
转换为
<script></script>
4.2网上搜索发现提供方式有
4.2.1 方式一: StringEscapeUtils转义比Jsoup小, 存在潜在问题
System.out.println(StringEscapeUtils.unescapeHtml4("<script></script>"));
//输入结果为: <script></script>
4.2.2方式二: 清除base设置后, 无效
无效
使用Jsoup处理HTML默认转义方式为base
有3种模式xhtml, base, extended
使用Jsoup 依赖版本
<version>1.8.3</version>
//使用当前属性Jsoup版本使用1.8.3版本
Document document = Jsoup.parse(file, "UTF-8");
Entities.EscapeMode.base.getMap().clear();
💯4.3不进行转义
输出document, 不进行转义处理
使用Jsoup 依赖版本
<version>1.10.2</version>
//禁用转义
String documentNew = Parser.unescapeEntities(document.toString(), false);