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
java注解生成xml和包含CDATA问题的更多相关文章
- Dom4J生成xml和包含CDATA问题
在 java注解生成xml和包含CDATA问题里面做了介绍,这里直接贴代码. 1:生成xml的java文件 package com.dufy.test.xml; import java.io.File ...
- Spring基础篇——通过Java注解和XML配置装配bean
自动化装配的确有很大的便利性,但是却并不能适用在所有的应用场景,比如需要装配的组件类不是由自己的应用程序维护,而是引用了第三方的类库,这个时候自动装配便无法实现,Spring对此也提供了相应的解决方案 ...
- Spring基础篇——通过Java注解和XML配置装配bean(转载)
作者:陈本布衣 出处:http://www.cnblogs.com/chenbenbuyi 本文版权归作者和博客园共有,欢迎转载分享,但必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留 ...
- 2018.4.13 用java配置/生成Xml文件 结合IO流知识点
自己创建本地文件Hello.txt 里面有数据 小明/23/增城/广东 小花/12/浦东/上海 StudentManager.java package com.lanqiao.dmeo7; impor ...
- Java解析和生成XML
1.Jaxb处理java对象和xml之间转换常用的annotation有: @XmlType @XmlElement @XmlRootElement @XmlAttribute @XmlAccesso ...
- java注解XML
用的是jdk自带的javax.xml.bind.JAXBContext将对象和xml字符串进行相互转换. 比较常用的几个: @XmlRootElement:根节点 @XmlAttribute:该属性作 ...
- java Document生成和解析xml
转自:https://blog.csdn.net/p812438109/article/details/81807440 Document场景:需要知道文档所有结构 需要把文档一些元素排序 文档中的信 ...
- JAXB实现java对象与xml之间转换
JAXB简介: 1.JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标 ...
- 总结学习! xml与java对象转换 --- JDK自带的JAXB(Java Architecture for XML Binding)
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反向 ...
随机推荐
- [C#] 如何截取完整的网页图片
前言 有时候浏览到非常有用的网页时,我们会选择将它加入到收藏夹中,但是网站一旦过期,以后就看不到这个网页了.当然也可以将网页打印成PDF文档保存.最新的Windows 10中的Edge浏览器支持将网页 ...
- MySQL(八)之DML
昨天晚上很晚的时候才写完MySQL的常用函数,今天给大家讲一下MySQL的DML.接下来让我们直接来学习了,今天感冒了.身体很难受下午的时候要去买一波药了,不然程序员也扛不住呀. DML全称Data ...
- 比较三个 CSS 预处理器:Sass、LESS 和 Stylus(下)
五.Mixins (混入) Mixins 有点像是函数或者是宏,当你某段 CSS 经常需要在多个元素中使用时,你可以为这些共用的 CSS 定义一个 Mixin,然后你只需要在需要引用这些 CSS 地方 ...
- shell变量$(CURDIR),$0,$1,$2,$#含义解释
$(CURDIR): CURDIR是make的内嵌变量, 为当前目录 实例 SRCTREE := $(CURDIR) *$(CURDIR)为当前目录,相当于SRCTREE=./ MKCONFIG ...
- React Native底|顶部导航使用小技巧
导航一直是App开发中比较重要的一个组件,ReactNative提供了两种导航组件供我们使用,分别是:NavigatorIOS和Navigator,但是前者只能用于iOS平台,后者在ReactNati ...
- 49、html基础认识&常用标签(1)
从今天期我们进入前端的学习,先学习html,没有任何需要逻辑需要烧脑,只需要记忆.练习.练习.练习. 一.HTML初识 1.web服务本质 import socket def main(): sock ...
- Excel表单的读取与处理 PHPExcel与Apache POI
近日,连续遇到需要对Excel表单内容进行读取的需求.一个是在php环境下,一个是在java环境下.这里简要记录这两种环境,利用第三方提供的函数库对Excel进行处理的方法. d0710 : Fini ...
- NPOI创建EXCEL(NOPI系列1)
private void button1_Click(object sender, EventArgs e) { //创建一个工作薄 HSSFWorkbook wk = new HSSFWorkboo ...
- 游戏平台代表--PS4【推荐】
目前市上专业的游戏主机三足鼎立,分别是任天堂的wii,微软的xbox,已经索尼的PlayStation系列,这其中的老大当然是索尼PS4啦,因为即使美国佬也是优选ps4而不是自家的Xbox.小编历经千 ...
- 201521123107 《Java程序设计》第14周学习总结
第14周-数据库 1.本周学习总结 2.书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名) 在自己建立的数据库上执行常见SQL语 ...