html解析工具jsoup结合模版引擎FreeMarkers的简单实例

目的:通过接收页面传来的页面html元素数据,结合FreeMarkers模版,组成一个新的页面html。


后台代码:

	@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>



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值