From d04769a9105a47d61d1b1af8abb05c13fa299342 Mon Sep 17 00:00:00 2001 From: "Link.Zhao" Date: Fri, 23 Sep 2022 17:39:47 +0800 Subject: [PATCH] =?UTF-8?q?REPORT-80742=E3=80=90=E8=BF=90=E8=90=A5?= =?UTF-8?q?=E4=BA=A7=E5=93=81=E5=8C=96=E4=BA=8C=E6=9C=9F=E3=80=91=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E5=95=86=E5=9F=8E=E7=9A=84=E8=AF=B4=E6=98=8E=E5=AD=97?= =?UTF-8?q?=E4=BD=93=E5=A4=A7=E5=B0=8F=E4=BB=8D=E7=84=B6=E4=B8=8D=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=20=E6=8E=A5=E5=8F=A3=E6=95=B0=E6=8D=AE=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E9=97=AE=E9=A2=98=20=E7=BB=9F=E4=B8=80=E8=BD=AC?= =?UTF-8?q?=E4=B8=BA=E7=BA=AF=E6=96=87=E6=9C=AC=EF=BC=8C=E4=BF=9D=E7=95=99?= =?UTF-8?q?a=E6=A0=87=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/TemplateResourceDetail.java | 48 ++++++++++++------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/model/TemplateResourceDetail.java b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/model/TemplateResourceDetail.java index 5065f6a2b..0a1d98449 100644 --- a/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/model/TemplateResourceDetail.java +++ b/designer-realize/src/main/java/com/fr/design/mainframe/alphafine/model/TemplateResourceDetail.java @@ -8,9 +8,10 @@ import com.fr.json.JSONObject; import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; -import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -169,7 +170,7 @@ public class TemplateResourceDetail { JSONObject resource = embedResources.getJSONObject(i); if (resourceId.equals(resource.getString(ID))) { detail.setInfo(resource.getString(INFO)); - detail.setHtmlText(resource.getString(DETAIL_INFO)); + detail.setHtmlText(reformat(resource.getString(DETAIL_INFO))); detail.setVendor(resource.getString(VENDOR)); detail.setPrice(resource.getDouble(PRICE)); detail.setResourceUrl(resource.getString(URL)); @@ -191,7 +192,7 @@ public class TemplateResourceDetail { // 1请求详细信息 JSONObject info = helper.getTemplateInfoById(resourceId); detail.setInfo(info.getString(INFO)); - detail.setHtmlText(info.getString(DETAIL_INFO)); + detail.setHtmlText(reformat(info.getString(DETAIL_INFO))); detail.setVendor(info.getString(VENDOR)); detail.setTagsId(info.getString(TAGS_ID).split(",")); detail.setPrice(info.getDouble(PRICE)); @@ -214,25 +215,36 @@ public class TemplateResourceDetail { return null; } + + static final String A_TAG_FORMAT = "%s"; + static final String HTML_TAG_REGX="<[^>]+>"; + static final Pattern A_TAG_PATTERN = Pattern.compile("]*href=(\\\"([^\\\"]*)\\\"|\\'([^\\']*)\\'|([^\\\\s>]*))[^>]*>(.*?)"); + static final Pattern HTML_TAG_PATTERN = Pattern.compile(HTML_TAG_REGX); + /** - * 这里做下数据转换 - * 原始数据是html标签写的,如下 - * "
  1. 该模板需用10.0及以上版本设计器预览

  2. 该模板为库存场景解决方案的部分内容,全部内容可下载库存场景解决方案查看

  3. 为保障模板预览效果,建议安装新自适应插件(FR11.0版本插件已内置,无需手动安装),有使用需求或疑问,请联系帆软技术支持咨询

", - * - * 转换的后的数据 是原始数据中所有

标签内的(包括标签)的字符串(List),如上字符串会转为如下 - * List [

该模板需用10.0及以上版本设计器预览

, - *

该模板为库存场景解决方案的部分内容,全部内容可下载库存场景解决方案查看

, - *

为保障模板预览效果,建议安装新自适应插件(FR11.0版本插件已内置,无需手动安装),有使用需求或疑问,请联系帆软技术支持咨询

- * ] + * 数据格式转换 + * 原始数据的格式不统一,纯文本、html都有; 统一转为纯文本,如果有a标签则保留 * */ - static final Pattern htmlPattern = Pattern.compile("

(.+?)

"); - static List parseDetailInfo(String htmlDetailInfo) { - List infos = new ArrayList<>(); - Matcher matcher = htmlPattern.matcher(htmlDetailInfo); + static String reformat(String htmlDetailInfo) { + String result = HTML_TAG_PATTERN.matcher(htmlDetailInfo).replaceAll(""); + Map aMap = getLink(htmlDetailInfo); + for (Map.Entry entry : aMap.entrySet()) { + String aTag = String.format(A_TAG_FORMAT, entry.getValue(), entry.getKey()); + result = result.replace(entry.getKey(), aTag); + } + return result; + } + + /** + * 读取dom中的a标签,转换为map + */ + static Map getLink(String html) { + Map map = new HashMap<>(); + Matcher matcher = A_TAG_PATTERN.matcher(html); while (matcher.find()) { - infos.add(matcher.group()); + map.put(matcher.group(5), matcher.group(1)); } - return infos; + return map; } }