使用Jsoup将Html的标签由嵌入式改为内联式

首先简单的介绍一下jsoup,jsoup是一款Java的HTML解析器,Jsoup可以将HTML转换成一个org.jsoup.nodes.Document对象,然后从Document对象中取出想要的元素。
在此附上jsoup的文档地址:Jsoup官方中文文档
首先引入jsoup

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.13.1</version>
</dependency>

使用Jsoup将Html的标签由嵌入式改为内联式的思路是先将html解析成document,然后就可以很方便地获取到document中的元素信息,再将原本写在head中的标签样式以key,value的形式存到map中,之后再获取到body内行上面的class信息,将这些class全部替换成map中的value即可,下面附上一个简单的demo以供参考,代码中有详细的注释。

    /**
     * 将写在head中的样式写入行内,变成内联式标签
     * @param html 原本需要替换的html
     * @return 替换之后的html
     */
    public String headCssToLineCss(String html) {
        //将html转成Document
        org.jsoup.nodes.Document doc = Jsoup.parse(html);
        //获取其中的style的内容
        String allcss = doc.getElementsByTag("style").html();
        //使用正则将所有的标签信息以key,value的形式放入map
        Map<String, String> styleMap = new HashMap<>();
        Pattern pattern = Pattern.compile("\\.(\\w+)\\{(?s)(.+?)\\}");
        Matcher matcher = pattern.matcher(allcss);
        while (matcher.find()) {
            styleMap.put(matcher.group(1), matcher.group(2));
        }
        //进行转换
        String repalcedHtml = replaceClass(styleMap,html);
        return repalcedHtml;
    }

    /**
     * 替换方法
     * @param styMap 嵌入式标签的名字,内容组成的map
     * @param html html信息
     * @return 替换完成之后的html
     */
    private static String replaceClass(Map<String, String> styMap, String html) {
        org.jsoup.nodes.Document doc = Jsoup.parse(html);
        //获取body内的行上面的class
        Elements anyClass = doc.getElementsByAttribute("class");
        for (Element element : anyClass) {
            String aClass = element.attr("class");
            String[] classStrs = (aClass.split(" "));
            //对所有的class进行替换
            for (String classStr : classStrs) {
                element.attr("style", element.attr("style") + styMap.get(classStr));
            }
            element.removeAttr("class");
        }
        //返回替换之后的html
        return doc.toString();
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值