【Jsoup】Jsoup解析Html标签(Java后台解析)

  

  中文API网站(下载地址): http://www.open-open.com/jsoup/ 

 

 

  有时候编辑器传到后台的内容是带Html标签的,或者有时候需要形成一个完整的Html文档,也或者需要解析其中的文字(text()),Java后台处理用Jsoup非常方便,也可以用选择器快速获取元素,类似于jQuery。获取到文档对此之后对其处理与JS处理DOM一样方便,选取元素也类似于JS,也有类似于jQuery的语法,官方的解释

 

1.最基本的解析Html字符串

复制代码
    @Test
    public void testHtmlToString2() {
        String html = "<p>这是一个段落<img src=\"test.img\"/>内容;</p>";
        Document doc = Jsoup.parse(html);
        System.out.println(doc); // 输出带标签的html文档
        System.out.println("---------------------\n"+doc.text()); // 输出内容
        Elements element = doc.getElementsByTag("p");
        System.out.println("---------------------\n"+element.get(0).html());
    }
复制代码

 

 

 

结果:

复制代码
<html>
 <head></head>
 <body>
  <p>这是一个段落<img src="test.img">内容;</p>
 </body>
</html>
---------------------
这是一个段落内容;
---------------------
这是一个段落<img src="test.img">内容;
复制代码

 

2.解析字符串

复制代码
    // 解析html字符串
    @Test
    public void testHtmlToString() {
        String html = "<html><head><title>First parse</title></head>"
                + "<body><p style='center'>Parsed HTML into a doc.</p></body></html>";
        Document doc = Jsoup.parse(html);
        System.out.println(doc); // 输出带标签的html文档
        System.out.println("---------------------\n"+doc.text()); // 输出内容
    }
复制代码

 

结果:

<html>
 <head>
  <title>First parse</title>
 </head>
 <body>
  <p style="center">Parsed HTML into a doc.</p>
 </body>
</html>
---------------------
First parse Parsed HTML into a doc.

3.// 解析body片段

    @Test
    public void test2() {
        String html = "<div><p>Lorem ipsum.</p>";
        Document doc = Jsoup.parseBodyFragment(html);
        System.out.println(doc);
        System.out.println(doc.text());
    }

 

结果:

<html>
 <head></head>
 <body>
  <div>
   <p>Lorem ipsum.</p>
  </div>
 </body>
</html>
Lorem ipsum.

4.// 解析一个url与用选择器选择元素(相当于查看源码)

复制代码
    @Test
    public void test4() throws IOException {
        Document doc = Jsoup.connect("http://qiaoliqiang.cn:8080/").get();
        String title = doc.title();// 获取title
        System.out.println(title);
        System.out.println("---------------------\n"+doc.toString()+"---------------------\n");// 输出文档全部
        Elements links = doc.getElementsByTag("a");
        for (Element ele : links) {
            System.out.println(ele.toString());
        }
    }
复制代码

 

 

Apache Tomcat/7.0.72
---------------------
<!doctype html>
<html lang="en">
 <head>
  <title>Apache Tomcat/7.0.72</title>
  <link href="favicon.ico" rel="icon" type="image/x-icon">
  <link href="favicon.ico" rel="shortcut icon" type="image/x-icon">
..........

 

5.选择器解析HTML并且提取input的value值:(获取元素的属性)

复制代码
    /**
     * <span class="bigNum">二</span>、
     * <span><input class="el_modifiedTitle" value="多选题" type="text"> </span>
     * <span>(每到题 <input class="el_modifiedGrade" value="2" type="text"> </span>
     * <span> 分;共</span><span class="numTotal">4分/</span>
     * <span class="numQues">2题)</span>
     * 
     * @param html
     * @return
     */
    // 去掉大题的标签
    public static String removeBigQues(String html) {
        StringBuffer sb = new StringBuffer();
        Document doc = Jsoup.parse(html);
        System.out.println(doc);
        System.out.println(doc.text());
        sb.append(doc.select(".bigNum").get(0).text() + ".  ");
        sb.append(doc.select(".el_modifiedTitle").get(0).attr("value"));
        sb.append(doc.select("span").get(2).text() + doc.select(".el_modifiedGrade").get(0).attr("value"));
        sb.append(doc.select("span").get(3).text());
        sb.append(doc.select("span").get(4).text());
        sb.append(doc.select("span").get(5).text());
        System.out.println(sb.toString());
        return sb.toString();
    }
复制代码

 

补充:今天发现Jsoup竟然没有解析元素style的方法,所以只能自己手写

  先获取到style属性,再对style属性进行处理,例如:

复制代码
        String style = "position: absolute; width: 500px; height: 552px;";
        String extract = "width";
        if (style.contains(extract)) {
            style = style.substring(style.indexOf(extract));
            System.out.println(style);
            style = style.substring(0, style.indexOf(";"));
            System.out.println(style);
            String attr = style.substring(style.indexOf(":") + 2);
            System.out.println(attr.substring(0, attr.indexOf("px")));
        }
复制代码

 

补充:元素的html()与outerHtml()的区别

  html()会返回包括子元素的内容以及标签,不包括自己

  outerHtml()会返回包括自己在内的元素。

 

在jQuery中如果返回子元素的内容也是html(),如果返回包括自己的内容需要用$("#chartdiv").prop("outerHTML");//会返回包括自己在内的内容

 

posted @   QiaoZhi  阅读(5473)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示