• java注解生成xml和包含CDATA问题


    百度java生成xml,有一大推的文章,主要的生成方式一种使用Dom4J ,还有一种使用Jdk自带注解类!
    下面主要整理我注解类的使用,(可以参考这篇文章Dom4J生成xml和包含CDATA问题)和xml中CDATA 问题的解决方法!
    1:要生成的xml原始文件!

    <?xml version="1.0" encoding="utf-8"?> 
    <item> 
      <id>35399645973</id>   
      <title><![CDATA[补水首选水密码水保湿美白护洗护组合三件]]> </title>  
     <category><![CDATA[美妆>保湿>洗护]]></category>
      <url><![CDATA[http://www.example.com/detail-35399645973]]> </url> 
      <url_wap><![CDATA[http://m.example.com/de99645973]]> </url_wap>   
      <price>310</price>   
      <promotion_price>93.8</promotion_price> 
    <wap_price>85</wap_price> 
    <sub_item_ids>
    		<sub_item_id>35399645973_1</sub_item_id>
    		<sub_item_id>35399645973_2</sub_item_id>
    		<sub_item_id>35399645973_3</sub_item_id>
    		……
    </sub_item_ids>
      <detail><![CDATA[商品详情,支持html图文混排]]> </detail> 
      <status>1<status>
    	<pic_main> 
        <img>  
          <url><![CDATA[http://www.example.com/10777829/T_400x400.jpg]]> </url> 
          <size>400x400</size> 
        </img> 
      </pic_main> 
      <pic_extra> 
        <img> 
          <url><![CDATA[http://www.example.com/10777821_400x400.jpg]]> </url> 
          <size>400x400</size>  
    	</img>   
    	<img> 
          <url><![CDATA[http://www.example.com/10777822_400x400.jpg]]> </url> 
          <size>400x400</size>  
        </img>   
      </pic_extra >   
    </item> 
    

    2:xml对应的model类!
    (1):FanLiProductInofMsg.java

    import java.util.List;
    
    import javax.xml.bind.annotation.XmlAttribute;
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlElementWrapper;
    import javax.xml.bind.annotation.XmlRootElement;
    
    /**
     * 
     * @author aflyun
     * @date 2016.06.12
     *
     */
    @XmlRootElement(name="item")
    public class FanLiProductInofMsg {
    
    	@XmlAttribute
    	private String version;
    	
    	@XmlElement
    	private String id;
    	
    	@XmlElement
    	private String title;
    	
    	@XmlElement
    	private String category;
    	
    	@XmlElement
    	private String url;//Pc商品的url
    	
    	@XmlElement(name="url_wap")
    	private String urlWap;//Wap商品的url  url_wap
    	
    	@XmlElement
    	private String price;
    	
    	@XmlElement(name="promotion_price")
    	private String promotionPrice;//promotion_price
    	
    	@XmlElement(name="wap_price")
    	private String wapPrice;//wap_price
    	
    	@XmlElementWrapper(name="sub_item_ids")
    	@XmlElement(name="sub_item_id")
    	private List<String> subItemIds;//sub_item_ids
    	
    	@XmlElement
    	private String detail;//detail
    	
    	@XmlElement
    	private String status;//status
    	
    	
    	@XmlElementWrapper(name="pic_main")
    	@XmlElement(name="img")
    	private List<Img> mainImg;//pic_main
    
    	@XmlElementWrapper(name="pic_extra")
    	@XmlElement(name="img")
    	private List<Img> extraImg;//pic_extra
    
    	
    	public void setVersion(String version) {
    		this.version = version;
    	}
    
    	public void setId(String id) {
    		this.id = id;
    	}
    
    	public void setTitle(String title) {
    		this.title = title;
    	}
    
    	public void setCategory(String category) {
    		this.category = category;
    	}
    
    	public void setUrl(String url) {
    		this.url = url;
    	}
    
    	public void setUrlWap(String urlWap) {
    		this.urlWap = urlWap;
    	}
    
    	public void setPrice(String price) {
    		this.price = price;
    	}
    
    	public void setPromotionPrice(String promotionPrice) {
    		this.promotionPrice = promotionPrice;
    	}
    
    	public void setWapPrice(String wapPrice) {
    		this.wapPrice = wapPrice;
    	}
    
    	public void setSubItemIds(List<String> subItemIds) {
    		this.subItemIds = subItemIds;
    	}
    
    	public void setDetail(String detail) {
    		this.detail = detail;
    	}
    
    	public void setStatus(String status) {
    		this.status = status;
    	}
    
    	public void setMainImg(List<Img> mainImg) {
    		this.mainImg = mainImg;
    	}
    
    	public void setExtraImg(List<Img> extraImg) {
    		this.extraImg = extraImg;
    	}
    
    }
    
    

    (2):Img .java

    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlRootElement;
    /**
     * 
     * @author aflyun
     * @date 2016.06.12
     *
     */
    @XmlRootElement
    public class Img {
    	
    	@XmlElement(name="url")
    	private String url;
    	
    	@XmlElement(name="size")
    	private String size;
    
    	public void setUrl(String url) {
    		this.url = url;
    	}
    
    	public void setSize(String size) {
    		this.size = size;
    	}
    	
    	
    }
    
    

    3:生成过程,已经CDATA问题处理!

    package com.dufy.test.xml;
    
    
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.xml.bind.JAXBContext;
    import javax.xml.bind.Marshaller;
    import javax.xml.transform.sax.SAXResult;
    
    import org.apache.xml.serialize.OutputFormat;
    import org.apache.xml.serialize.XMLSerializer;
    import org.junit.Test;
    
    import com.kuyu.b2b2c.product.fanli.vo.FanLiProductInofMsg;
    import com.kuyu.b2b2c.product.fanli.vo.Img;
    
    public class JuintXmlTest {
    
    	private static Marshaller marshal;
    	
    	@Test
    	public void testXml() throws Exception {
    		List<String> list = new ArrayList<String>();
    		list.add("11_11_11");
    		list.add("22_22_22");
    		list.add("33_33_33");
    		List<Img> imgList = new ArrayList<Img>();
    		Img img = null;
    		for (int i = 0; i < 2; i++) {
    			img = new Img();
    			img.setUrl("-" + i + "-");
    			img.setSize("40×40");
    			imgList.add(img);
    		}
    		
    		FanLiProductInofMsg fps = new FanLiProductInofMsg();
    		fps.setVersion("1.0");
    		fps.setId("110");
    		fps.setTitle("4K 高清");
    		fps.setCategory("电视>4K>高清");
    		fps.setUrl("http://baidu.com");
    		fps.setUrlWap("http://baidu.wap.com");
    		fps.setPrice("100");
    		fps.setPromotionPrice("111");
    		fps.setWapPrice("113");
    		fps.setSubItemIds(list);
    		fps.setDetail("wwwwwwwwwwwwwwwwwwwwwww");
    		fps.setStatus("1");
    		fps.setMainImg(imgList);
    		fps.setExtraImg(imgList);
    		
    		 PrintWriter pw = new PrintWriter(new File("D:/test.xml"));
    		 String ojbectToXmlWithCDATA = ojbectToXmlWithCDATA(FanLiProductInofMsg.class, fps);
    		 System.out.println(ojbectToXmlWithCDATA);
    		 pw.println(ojbectToXmlWithCDATA);
    		 pw.close();
    		
    		
    		
    	}
    	 public static String ojbectToXmlWithCDATA(Class clazz, Object obj) throws Exception {  
       	  
    	        JAXBContext context = JAXBContext.newInstance(clazz);  
    	        // configure an OutputFormat to handle CDATA
    		    OutputFormat of = new OutputFormat();
    		    of.setCDataElements(
    				  new String[] { "^title", //  
    						  		 "^category",
    						  		 "^url",
    						  		 "^url_wap",
    						  		 "^detail"
    						  		 }); //  
    
    		    // set any other options you'd like
    		    of.setPreserveSpace(true);
    		    of.setIndenting(true);
    		    // create the serializer
    	        ByteArrayOutputStream op = new ByteArrayOutputStream();  
    	        XMLSerializer serializer = new XMLSerializer(op, of);  
    	        SAXResult result = new SAXResult(serializer.asContentHandler());  
    	        Marshaller mar = context.createMarshaller(); 
    	        mar.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);  
    	        mar.marshal(obj, result);  
    	        
    	        return op.toString("utf-8");  
    	    }  
    
    }
    
    

    setCDataElements 这里面你标注需CDATA 的字段!

    上面的这个例子可以直接拷贝运行,网上还一些其他的方法生成xml和CDATA,如果你有好的方法,欢迎分享给我,谢谢!
    4:参考文章
    (1):Jaxb2 转换XML文档
    (2):Jaxb annotation初步使用
    (3):三步解决JAXB生成XML包含CDATA问题—JAVA编程


    欢迎访问我的csdn博客,我们一同成长!

    "不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!"
    http://blog.csdn.net/u010648555

    版权声明 作者:阿飞云 出处:博客园阿飞云的技术博客--http://www.cnblogs.com/aflyun 您的支持是对博主最大的鼓励,感谢您的认真阅读。 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Spring 自动装配;方法注入
    Spring 依赖注入(二、注入参数)
    Spring 依赖注入(一、注入方式)
    Spring IOC(控制反转)示例解析
    PowerDesigner最基础的使用方法入门学习
    Struts2 文件上传和下载
    Struts2 转换器
    ResultSet相关ResultSetMetaData详细(转)
    hibernate缓存详解
    hibernate缓存机制【转】
  • 原文地址:https://www.cnblogs.com/aflyun/p/6414487.html
Copyright © 2020-2023  润新知