将HTML的<style>样式,变为行内样式

来源:互联网 发布:淘宝卖家怎么开直通车 编辑:程序博客网 时间:2024/04/30 17:50

这里我们要借助Jsoup这个工具进行处理。
原理就是现将style标签的内容封装为一个Map,然后在获取所有拥有class的标签,将map和class一一对应,最后写入行中。
没啥可说的,直接撸袖子干。

    private static String replaceClass(Map<String, String> styMap, String html) {        org.jsoup.nodes.Document doc = Jsoup.parse(html);        Elements anyClass = doc.getElementsByAttribute("class");        for (Element element : anyClass) {            String aClass = element.attr("class");            System.out.println(aClass);            String[] classStrs = (aClass.split(" "));            for (String classStr : classStrs) {                element.attr("style", element.attr("style") + styMap.get(classStr));            }            element.removeAttr("class");        }        return doc.toString();    }    private static String formatHtmlRowCss(String html) {        org.jsoup.nodes.Document jsoup = Jsoup.parse(html);        JXDocument doc = new JXDocument(html);        String allcss = jsoup.getElementsByTag("style").html();        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));        }        return Word2HtmlUnit.replaceClass(styleMap, html);    }

这里我只替换了简单的class,如果有其他需求请只管加,因为题主这里只需要class样式,所以并没有写的很通用。jsoup支持css表达式,所以前期不要按照”.”去分割,直接将“#XXX”“.XXX””XXX>XXX”这样的形式封装到map中,替换时,直接通过这个名字去查找元素。

原创粉丝点击