html解析工具jsoup结合模版引擎FreeMarkers的简单实例
2016-01-04 08:59
639 查看
目的:通过接收页面传来的页面html元素数据,结合FreeMarkers模版,组成一个新的页面html。
后台代码:
模版文件formTemplate_example.ftl:
<#switch uiType>
<#case "text">
<input name="${name?if_exists}" title="${title?if_exists}" value="${value?if_exists}" type ="${uiType?if_exists}"
<#if required?? && required == "1">required="true"</#if>
<#if readonly?? && readonly == "1">readonly="true"</#if>
<#if disabled?? && disabled == "1">disabled="true"</#if>
/>
<#break>
<#case "radio">
<input name="${name?if_exists}" title="${title?if_exists}" value="${value?if_exists}" type ="${uiType?if_exists}"
<#if checked?? && checked == "1">checked="true"</#if>
<#if disabled?? && disabled == "1">disabled="true"</#if>
/>
<#break>
<#case "checkbox">
<input name="${name?if_exists}" title="${title?if_exists}" value="${value?if_exists}" type ="${uiType?if_exists}"
<#if checked?? && checked == "1">checked="true"</#if>
<#if disabled?? && disabled == "1">disabled="true"</#if>
/>
<#break>
<#case "hidden">
<input name="${name?if_exists}" title="${title?if_exists}" value="${value?if_exists}" type ="${uiType?if_exists}" />
<#break>
<#case "select">
<select name="${name?if_exists}" title="${title?if_exists}" <#if disabled?? && disabled == "1">disabled="true"</#if> >
<#list list as item>
<option value="${item.value?if_exists}" <#if item.selected?? && item.selected == "1">selected="true"</#if> >${item.text?if_exists}</option>
</#list>
</select>
<#break>
<#case "textarea">
<textarea name="${name?if_exists}" <#if disabled?? && disabled == "1">disabled="true"</#if> <#if readonly?? && readonly == "1">readonly="true"</#if>
rows="${rows?if_exists}" cols="${cols?if_exists}" title="${title?if_exists}" >
${text?if_exists}
</textarea>
<#break>
<#default>
<input name="${name?if_exists}" title="${title?if_exists}" value="${value?if_exists}" type ="${uiType?if_exists}" />
</#switch>
后台代码:
@RequestMapping({ "prevParse" }) @ResponseBody public String prevParse(@RequestParam(value = "content", required = false) String content) throws Exception{ //单引号转义字符替换成双引号转义字符 String html=content.replace(""", "'"); //反转义html String escapeHtml=EncodeUtils.htmlUnescape(html); System.out.println(escapeHtml); //解析html获取数据 Document doc = Jsoup.parse(escapeHtml); //读取FreeMarkers模版 File file = new File(this.getClass().getClassLoader().getResource("formTemplate_example.ftl").getFile()); String ftlContent =EncodeUtils.htmlUnescape(FileUtils.readFileToString(file)); //获取input标签数据 Elements inputs = doc.getElementsByTag("input"); for (Element input : inputs) { Map<String,Object> dataMap = Maps.newHashMap(); String title= input.attr("title") == null ? "" : input.attr("title"); dataMap.put("title", title); String name= input.attr("name") == null ? "" : input.attr("name"); dataMap.put("name", name); String type= input.attr("type") == null ? "" : input.attr("type"); dataMap.put("uiType", type); String defaultValue= input.attr("value") == null ? "" : input.attr("value"); dataMap.put("value", defaultValue); String orgform=input.attr("orgform"); Map orgformList=JsonMapper.getInstance().fromJson(orgform, Map.class); String readonly =(String)orgformList.get("readonly") == null ? "" : (String)orgformList.get("readonly"); dataMap.put("readonly", readonly); String checked =(String)orgformList.get("checked") == null ? "" : (String)orgformList.get("checked"); dataMap.put("checked", checked); String disabled =(String)orgformList.get("disabled") == null ? "" : (String)orgformList.get("disabled"); dataMap.put("disabled", disabled); //HTML5属性 String required =(String)orgformList.get("required") == null ? "" : (String)orgformList.get("required"); dataMap.put("required", required); //渲染模板字符串 String fmv = FreeMarkers.renderString(ftlContent, dataMap); String result = Jsoup.parse(fmv).body().html();//优化html //构造一个元素Element,初始化为渲染后的html Tag tag=Tag.valueOf("div"); Element e =new Element(tag, ""); e.append(result); //用渲染后的新元素替换掉原来的元素 input.replaceWith(e.childNode(0)); } //获取select标签数据 Elements selects = doc.getElementsByTag("select"); for (Element select : selects) { Map<String,Object> dataMap = Maps.newHashMap(); List<Map<String, Object>> mapList = Lists.newArrayList(); dataMap.put("uiType", "select"); String title= select.attr("title") == null ? "" : select.attr("title"); dataMap.put("title", title); String name= select.attr("name") == null ? "" : select.attr("name"); dataMap.put("name", name); String orgform=select.attr("orgform"); Map orgformList=JsonMapper.getInstance().fromJson(orgform, Map.class); String disabled =(String)orgformList.get("disabled") == null ? "" : (String)orgformList.get("disabled"); dataMap.put("disabled", disabled); Elements options = select.children(); for (Element option : options) { Map<String,Object> map = Maps.newHashMap(); String value= option.attr("value") == null ? "" : option.attr("value"); map.put("value", value); String optionorgform=option.attr("orgform"); Map optionorgformList=JsonMapper.getInstance().fromJson(optionorgform, Map.class); String selected =(String)optionorgformList.get("selected") == null ? "" : (String)orgformList.get("selected"); map.put("selected", selected); String text= option.text() == null ? "" : option.text(); map.put("text", text); mapList.add(map); } dataMap.put("list", mapList); //渲染模板字符串 String fmv = FreeMarkers.renderString(ftlContent, dataMap); String result = Jsoup.parse(fmv).body().html();//优化html //构造一个元素Element,初始化为渲染后的html Tag tag=Tag.valueOf("div"); Element e =new Element(tag, ""); e.append(result); //用渲染后的新元素替换掉原来的元素 select.replaceWith(e.childNode(0)); } //获取textarea标签数据 Elements textareas = doc.getElementsByTag("textarea"); for (Element textarea : textareas) { Map<String,Object> dataMap = Maps.newHashMap(); dataMap.put("uiType", "textarea"); String text= textarea.text() == null ? "" : textarea.text(); dataMap.put("text", text); String title= textarea.attr("title") == null ? "" : textarea.attr("title"); dataMap.put("title", title); String name= textarea.attr("name") == null ? "" : textarea.attr("name"); dataMap.put("name", name); String rows= textarea.attr("rows") == null ? "" : textarea.attr("rows"); dataMap.put("rows", rows); String cols= textarea.attr("cols") == null ? "" : textarea.attr("cols"); dataMap.put("cols", cols); String orgform=textarea.attr("orgform"); Map orgformList=JsonMapper.getInstance().fromJson(orgform, Map.class); String readonly =(String)orgformList.get("readonly") == null ? "" : (String)orgformList.get("readonly"); dataMap.put("readonly", readonly); String disabled =(String)orgformList.get("disabled") == null ? "" : (String)orgformList.get("disabled"); dataMap.put("disabled", disabled); //渲染模板字符串 String fmv = FreeMarkers.renderString(ftlContent, dataMap); String result = Jsoup.parse(fmv).body().html();//优化html //构造一个元素Element,初始化为渲染后的html Tag tag=Tag.valueOf("div"); Element e =new Element(tag, ""); e.append(result); //用渲染后的新元素替换掉原来的元素 textarea.replaceWith(e.childNode(0)); } String parsehtml = EncodeUtils.htmlUnescape(doc.body().html()); return parsehtml; }
模版文件formTemplate_example.ftl:
<#switch uiType>
<#case "text">
<input name="${name?if_exists}" title="${title?if_exists}" value="${value?if_exists}" type ="${uiType?if_exists}"
<#if required?? && required == "1">required="true"</#if>
<#if readonly?? && readonly == "1">readonly="true"</#if>
<#if disabled?? && disabled == "1">disabled="true"</#if>
/>
<#break>
<#case "radio">
<input name="${name?if_exists}" title="${title?if_exists}" value="${value?if_exists}" type ="${uiType?if_exists}"
<#if checked?? && checked == "1">checked="true"</#if>
<#if disabled?? && disabled == "1">disabled="true"</#if>
/>
<#break>
<#case "checkbox">
<input name="${name?if_exists}" title="${title?if_exists}" value="${value?if_exists}" type ="${uiType?if_exists}"
<#if checked?? && checked == "1">checked="true"</#if>
<#if disabled?? && disabled == "1">disabled="true"</#if>
/>
<#break>
<#case "hidden">
<input name="${name?if_exists}" title="${title?if_exists}" value="${value?if_exists}" type ="${uiType?if_exists}" />
<#break>
<#case "select">
<select name="${name?if_exists}" title="${title?if_exists}" <#if disabled?? && disabled == "1">disabled="true"</#if> >
<#list list as item>
<option value="${item.value?if_exists}" <#if item.selected?? && item.selected == "1">selected="true"</#if> >${item.text?if_exists}</option>
</#list>
</select>
<#break>
<#case "textarea">
<textarea name="${name?if_exists}" <#if disabled?? && disabled == "1">disabled="true"</#if> <#if readonly?? && readonly == "1">readonly="true"</#if>
rows="${rows?if_exists}" cols="${cols?if_exists}" title="${title?if_exists}" >
${text?if_exists}
</textarea>
<#break>
<#default>
<input name="${name?if_exists}" title="${title?if_exists}" value="${value?if_exists}" type ="${uiType?if_exists}" />
</#switch>
相关文章推荐
- javascript基础语法学习笔记
- 封装好的javascript前端分页插件pagination
- js控制精度的加减乘除:js浮点数计算问题
- js完整教程一 : 基本概念和数组操作
- 详解javascript的变量与标识符
- JavaScript 闭包环境非常奇特 - 相当于类与实例的关系?!
- [Javascript] JSON.parse API
- JavaScript基础——Ajax与Comet
- JSP对URL链接中的中文乱码处理方法总结
- JavaScript原型及原型链终极详解
- 详解javascript的变量与标识符
- 封装好的javascript前端分页插件pagination
- javascript基础语法学习笔记
- 实例代码详解javascript实现窗口抖动及qq窗口抖动
- 基于JavaScript实现移除(删除)数组中指定元素
- 学习javascript面向对象 理解javascript对象
- 学习javascript面向对象 掌握创建对象的9种方式
- 学习javascript面向对象 javascript实现继承的方式
- 学习javascript面向对象 实例讲解面向对象选项卡
- 学习javascript面向对象 理解javascript原型和原型链