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

百度java生成xml,有一大推的文章,主要的生成方式一种使用Dom4J ,还有一种使用Jdk自带注解类!

下面主要整理我注解类的使用,(可以参考这篇文章Dom4J生成xml和包含CDATA问题)和xml中CDATA 问题的解决方法!

1:要生成的xml原始文件!

35399645973

保湿>洗护]]>

310

93.8

85

35399645973_1

35399645973_2

35399645973_3

……

1

400x400

400x400

400x400

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 subItemIds;//sub_item_ids

@XmlElement

private String detail;//detail

@XmlElement

private String status;//status

@XmlElementWrapper(name="pic_main")

@XmlElement(name="img")

private List mainImg;//pic_main

@XmlElementWrapper(name="pic_extra")

@XmlElement(name="img")

private List 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 subItemIds) {

this.subItemIds = subItemIds;

}

public void setDetail(String detail) {

this.detail = detail;

}

public void setStatus(String status) {

this.status = status;

}

public void setMainImg(List mainImg) {

this.mainImg = mainImg;

}

public void setExtraImg(List 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 list = new ArrayList();

list.add("11_11_11");

list.add("22_22_22");

list.add("33_33_33");

List imgList = new ArrayList();

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值