java - 如何避免在 Jsoup 解析中包围 html head 标签

标签 java html parsing jsoup

我尝试使用 Jsoup 解析给定的 html 内容。在 Jsoup.parse() 之后,html 输出将 html、head 和 body 标记附加到输入。我只想忽略这些。

示例输入:

<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>

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();
        }
    }
}

实际输出:

<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>

关于java - 如何避免在 Jsoup 解析中包围 html head 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26173769/

相关文章:

java - 属性未记录在序列化arraylist中

java - 如何为 Vaadin 服务器和客户端配置一般日志记录?

java - 使用 getContentResolver().update 时没有此类列异常

Firefox 中的 HTML 按钮文本对齐方式

html - 如果显示一个 div :none?,div 元素中是否允许连续使用相同名称的 anchor

html - CSS悬停图像显示div

Python 3 正则表达式最后一场比赛

java - 在 Java、Maven 中导入路径

python - 有选择地替换字符串中特定的嵌套定界符(括号),同时尊重嵌套

python - 使用 BeautifulSoup 抓取预标记内的文本