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

时间:2023-03-08 17:44:34

百度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编程


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

"不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!"

http://blog.****.net/u010648555