[英]How to avoid surrounding html head tags in Jsoup parse
使用 Jsoup 我嘗試解析給定的 html 內容。 在 Jsoup.parse() 之后,html 輸出將 html、head 和 body 標記附加到輸入。 我只想忽略這些。
樣本輸入:
<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
爪哇代碼:
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();
}
}
}
實際輸出:
<html><head></head><body><p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
</body></html>
預期輸出:
<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
請幫忙。
parseBodyFragment()
以及所有其他parse()
方法默認使用HTML 解析器。 而那些總是添加 HTML-Shell( <html>…</html>
, <head>…</head>
等)。
只是不要使用 HTML 解析器,而是使用XML 解析器;-)
Document doc = Jsoup.parse(html, "", Parser.xmlParser());
更換那條線,你的問題就解決了。
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);
輸出:
******* 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>
要獲得預期的輸出,它實際上是:
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());
您可以嘗試使用 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());
您也可以將 Jsoup.parse 與 HTML 解析器一起使用。 您需要做的就是去除html
和body
包裝器。
這可以通過選擇body
元素並展開它來完成:
String input = "<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>";
Node content = Jsoup.parse(input).body().unwrap();
System.out.println(content.html());
通過body()
選擇body
元素,通過unwrap()
移除 body 並且只保留內容。
所以輸出是:
<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.