这里我们要借助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中,替换时,直接通过这个名字去查找元素。