Ros*_*han 16 html java parsing jsoup
使用Jsoup我尝试解析给定的html内容.在Jsoup.parse()之后,html输出将html,head和body标记附加到输入.我只是想忽略这些.
样本输入:
<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
Run Code Online (Sandbox Code Playgroud)
Java代码:
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class HTMLParse {
public static void main(String args[]) throws IOException {
try{
File input = new File("/ab.html");
String html = FileUtils.readFileToString(input, null);
Document doc = Jsoup.parseBodyFragment(html);
doc.outputSettings().prettyPrint(false);
System.out.println(doc.html());
}
catch(Exception e){
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
实际产量:
<html><head></head><body><p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
</body></html>
Run Code Online (Sandbox Code Playgroud)
预期产出:
<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
Run Code Online (Sandbox Code Playgroud)
请帮忙.
oll*_*llo 17
parseBodyFragment()
以及所有其他的parse()
-方法使用的HTML解析器的默认.而那些加总的HTML壳牌(<html>…</html>
,<head>…</head>
等等).
只是不要使用HTML解析器,而是使用XML解析器 ;-)
Document doc = Jsoup.parse(html, "", Parser.xmlParser());
Run Code Online (Sandbox Code Playgroud)
替换该单行,您的问题就解决了.
final String html = "<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>";
Document docHtml = Jsoup.parse(html);
Document docXml = Jsoup.parse(html, "", Parser.xmlParser());
System.out.println("******* HTML *******\n" + docHtml);
System.out.println();
System.out.println("******* XML *******\n" + docXml);
Run Code Online (Sandbox Code Playgroud)
输出:
******* HTML *******
<html>
<head></head>
<body>
<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
</body>
</html>
******* XML *******
<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
Run Code Online (Sandbox Code Playgroud)
要获得预期的输出,它实际上是:
final String html = "<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>";
Document doc = Jsoup.parseBodyFragment(html);
doc.outputSettings().prettyPrint(false);
System.out.println(doc.body().html());
Run Code Online (Sandbox Code Playgroud)
您可以尝试使用XML解析器,但这并不总是有效,因为HTML并不总是XML。它通常具有未终止的标签,例如<img>
和<br>
。最好坚持使用HTML解析器。你可以依靠有存在<html>
,<head>
以及<body>
标签和他们很容易丢弃。只需选择body标记并获取其HTML,即可获取HTML片段。
Document doc = Jsoup.parseBodyFragment(html);
doc.outputSettings().prettyPrint(false);
System.out.println(doc.select("body").html());
Run Code Online (Sandbox Code Playgroud)