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 {
<span class="hljs-meta">@XmlAttribute</span>
<span class="hljs-keyword">private</span> <span class="hljs-title class_">String</span> version;
<span class="hljs-meta">@XmlElement</span>
<span class="hljs-keyword">private</span> <span class="hljs-title class_">String</span> id;
<span class="hljs-meta">@XmlElement</span>
<span class="hljs-keyword">private</span> <span class="hljs-title class_">String</span> title;
<span class="hljs-meta">@XmlElement</span>
<span class="hljs-keyword">private</span> <span class="hljs-title class_">String</span> category;
<span class="hljs-meta">@XmlElement</span>
<span class="hljs-keyword">private</span> <span class="hljs-title class_">String</span> url;<span class="hljs-comment">//Pc商品的url</span>
<span class="hljs-meta">@XmlElement</span>(name=<span class="hljs-string">"url_wap"</span>)
<span class="hljs-keyword">private</span> <span class="hljs-title class_">String</span> urlWap;<span class="hljs-comment">//Wap商品的url url_wap</span>
<span class="hljs-meta">@XmlElement</span>
<span class="hljs-keyword">private</span> <span class="hljs-title class_">String</span> price;
<span class="hljs-meta">@XmlElement</span>(name=<span class="hljs-string">"promotion_price"</span>)
<span class="hljs-keyword">private</span> <span class="hljs-title class_">String</span> promotionPrice;<span class="hljs-comment">//promotion_price</span>
<span class="hljs-meta">@XmlElement</span>(name=<span class="hljs-string">"wap_price"</span>)
<span class="hljs-keyword">private</span> <span class="hljs-title class_">String</span> wapPrice;<span class="hljs-comment">//wap_price</span>
<span class="hljs-meta">@XmlElementWrapper</span>(name=<span class="hljs-string">"sub_item_ids"</span>)
<span class="hljs-meta">@XmlElement</span>(name=<span class="hljs-string">"sub_item_id"</span>)
<span class="hljs-keyword">private</span> <span class="hljs-title class_">List</span><<span class="hljs-title class_">String</span>> subItemIds;<span class="hljs-comment">//sub_item_ids</span>
<span class="hljs-meta">@XmlElement</span>
<span class="hljs-keyword">private</span> <span class="hljs-title class_">String</span> detail;<span class="hljs-comment">//detail</span>
<span class="hljs-meta">@XmlElement</span>
<span class="hljs-keyword">private</span> <span class="hljs-title class_">String</span> status;<span class="hljs-comment">//status</span>
<span class="hljs-meta">@XmlElementWrapper</span>(name=<span class="hljs-string">"pic_main"</span>)
<span class="hljs-meta">@XmlElement</span>(name=<span class="hljs-string">"img"</span>)
<span class="hljs-keyword">private</span> <span class="hljs-title class_">List</span><<span class="hljs-title class_">Img</span>> mainImg;<span class="hljs-comment">//pic_main</span>
<span class="hljs-meta">@XmlElementWrapper</span>(name=<span class="hljs-string">"pic_extra"</span>)
<span class="hljs-meta">@XmlElement</span>(name=<span class="hljs-string">"img"</span>)
<span class="hljs-keyword">private</span> <span class="hljs-title class_">List</span><<span class="hljs-title class_">Img</span>> extraImg;<span class="hljs-comment">//pic_extra</span>
<span class="hljs-keyword">public</span> <span class="hljs-built_in">void</span> <span class="hljs-title function_">setVersion</span>(<span class="hljs-params"><span class="hljs-built_in">String</span> version</span>) {
<span class="hljs-variable language_">this</span>.<span class="hljs-property">version</span> = version;
}
<span class="hljs-keyword">public</span> <span class="hljs-built_in">void</span> <span class="hljs-title function_">setId</span>(<span class="hljs-params"><span class="hljs-built_in">String</span> id</span>) {
<span class="hljs-variable language_">this</span>.<span class="hljs-property">id</span> = id;
}
<span class="hljs-keyword">public</span> <span class="hljs-built_in">void</span> <span class="hljs-title function_">setTitle</span>(<span class="hljs-params"><span class="hljs-built_in">String</span> title</span>) {
<span class="hljs-variable language_">this</span>.<span class="hljs-property">title</span> = title;
}
<span class="hljs-keyword">public</span> <span class="hljs-built_in">void</span> <span class="hljs-title function_">setCategory</span>(<span class="hljs-params"><span class="hljs-built_in">String</span> category</span>) {
<span class="hljs-variable language_">this</span>.<span class="hljs-property">category</span> = category;
}
<span class="hljs-keyword">public</span> <span class="hljs-built_in">void</span> <span class="hljs-title function_">setUrl</span>(<span class="hljs-params"><span class="hljs-built_in">String</span> url</span>) {
<span class="hljs-variable language_">this</span>.<span class="hljs-property">url</span> = url;
}
<span class="hljs-keyword">public</span> <span class="hljs-built_in">void</span> <span class="hljs-title function_">setUrlWap</span>(<span class="hljs-params"><span class="hljs-built_in">String</span> urlWap</span>) {
<span class="hljs-variable language_">this</span>.<span class="hljs-property">urlWap</span> = urlWap;
}
<span class="hljs-keyword">public</span> <span class="hljs-built_in">void</span> <span class="hljs-title function_">setPrice</span>(<span class="hljs-params"><span class="hljs-built_in">String</span> price</span>) {
<span class="hljs-variable language_">this</span>.<span class="hljs-property">price</span> = price;
}
<span class="hljs-keyword">public</span> <span class="hljs-built_in">void</span> <span class="hljs-title function_">setPromotionPrice</span>(<span class="hljs-params"><span class="hljs-built_in">String</span> promotionPrice</span>) {
<span class="hljs-variable language_">this</span>.<span class="hljs-property">promotionPrice</span> = promotionPrice;
}
<span class="hljs-keyword">public</span> <span class="hljs-built_in">void</span> <span class="hljs-title function_">setWapPrice</span>(<span class="hljs-params"><span class="hljs-built_in">String</span> wapPrice</span>) {
<span class="hljs-variable language_">this</span>.<span class="hljs-property">wapPrice</span> = wapPrice;
}
<span class="hljs-keyword">public</span> <span class="hljs-built_in">void</span> <span class="hljs-title function_">setSubItemIds</span>(<span class="hljs-params">List<<span class="hljs-built_in">String</span>> subItemIds</span>) {
<span class="hljs-variable language_">this</span>.<span class="hljs-property">subItemIds</span> = subItemIds;
}
<span class="hljs-keyword">public</span> <span class="hljs-built_in">void</span> <span class="hljs-title function_">setDetail</span>(<span class="hljs-params"><span class="hljs-built_in">String</span> detail</span>) {
<span class="hljs-variable language_">this</span>.<span class="hljs-property">detail</span> = detail;
}
<span class="hljs-keyword">public</span> <span class="hljs-built_in">void</span> <span class="hljs-title function_">setStatus</span>(<span class="hljs-params"><span class="hljs-built_in">String</span> status</span>) {
<span class="hljs-variable language_">this</span>.<span class="hljs-property">status</span> = status;
}
<span class="hljs-keyword">public</span> <span class="hljs-built_in">void</span> <span class="hljs-title function_">setMainImg</span>(<span class="hljs-params">List<Img> mainImg</span>) {
<span class="hljs-variable language_">this</span>.<span class="hljs-property">mainImg</span> = mainImg;
}
<span class="hljs-keyword">public</span> <span class="hljs-built_in">void</span> <span class="hljs-title function_">setExtraImg</span>(<span class="hljs-params">List<Img> extraImg</span>) {
<span class="hljs-variable language_">this</span>.<span class="hljs-property">extraImg</span> = 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 {
<span class="hljs-meta">@XmlElement</span>(name=<span class="hljs-string">"url"</span>)
<span class="hljs-keyword">private</span> <span class="hljs-title class_">String</span> url;
<span class="hljs-meta">@XmlElement</span>(name=<span class="hljs-string">"size"</span>)
<span class="hljs-keyword">private</span> <span class="hljs-title class_">String</span> size;
<span class="hljs-keyword">public</span> <span class="hljs-built_in">void</span> <span class="hljs-title function_">setUrl</span>(<span class="hljs-params"><span class="hljs-built_in">String</span> url</span>) {
<span class="hljs-variable language_">this</span>.<span class="hljs-property">url</span> = url;
}
<span class="hljs-keyword">public</span> <span class="hljs-built_in">void</span> <span class="hljs-title function_">setSize</span>(<span class="hljs-params"><span class="hljs-built_in">String</span> size</span>) {
<span class="hljs-variable language_">this</span>.<span class="hljs-property">size</span> = 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 {
<span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> Marshaller marshal;
<span class="hljs-meta">@Test</span>
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">testXml</span><span class="hljs-params">()</span> <span class="hljs-keyword">throws</span> Exception {
List<String> list = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ArrayList</span><String>();
list.add(<span class="hljs-string">"11_11_11"</span>);
list.add(<span class="hljs-string">"22_22_22"</span>);
list.add(<span class="hljs-string">"33_33_33"</span>);
List<Img> imgList = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ArrayList</span><Img>();
<span class="hljs-type">Img</span> <span class="hljs-variable">img</span> <span class="hljs-operator">=</span> <span class="hljs-literal">null</span>;
<span class="hljs-keyword">for</span> (<span class="hljs-type">int</span> <span class="hljs-variable">i</span> <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i < <span class="hljs-number">2</span>; i++) {
img = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Img</span>();
img.setUrl(<span class="hljs-string">"-"</span> + i + <span class="hljs-string">"-"</span>);
img.setSize(<span class="hljs-string">"40×40"</span>);
imgList.add(img);
}
<span class="hljs-type">FanLiProductInofMsg</span> <span class="hljs-variable">fps</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">FanLiProductInofMsg</span>();
fps.setVersion(<span class="hljs-string">"1.0"</span>);
fps.setId(<span class="hljs-string">"110"</span>);
fps.setTitle(<span class="hljs-string">"4K 高清"</span>);
fps.setCategory(<span class="hljs-string">"电视>4K>高清"</span>);
fps.setUrl(<span class="hljs-string">"http://baidu.com"</span>);
fps.setUrlWap(<span class="hljs-string">"http://baidu.wap.com"</span>);
fps.setPrice(<span class="hljs-string">"100"</span>);
fps.setPromotionPrice(<span class="hljs-string">"111"</span>);
fps.setWapPrice(<span class="hljs-string">"113"</span>);
fps.setSubItemIds(list);
fps.setDetail(<span class="hljs-string">"wwwwwwwwwwwwwwwwwwwwwww"</span>);
fps.setStatus(<span class="hljs-string">"1"</span>);
fps.setMainImg(imgList);
fps.setExtraImg(imgList);
<span class="hljs-type">PrintWriter</span> <span class="hljs-variable">pw</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">PrintWriter</span>(<span class="hljs-keyword">new</span> <span class="hljs-title class_">File</span>(<span class="hljs-string">"D:/test.xml"</span>));
<span class="hljs-type">String</span> <span class="hljs-variable">ojbectToXmlWithCDATA</span> <span class="hljs-operator">=</span> ojbectToXmlWithCDATA(FanLiProductInofMsg.class, fps);
System.out.println(ojbectToXmlWithCDATA);
pw.println(ojbectToXmlWithCDATA);
pw.close();
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> String <span class="hljs-title function_">ojbectToXmlWithCDATA</span><span class="hljs-params">(Class clazz, Object obj)</span> <span class="hljs-keyword">throws</span> Exception {
<span class="hljs-type">JAXBContext</span> <span class="hljs-variable">context</span> <span class="hljs-operator">=</span> JAXBContext.newInstance(clazz);
<span class="hljs-comment">// configure an OutputFormat to handle CDATA</span>
<span class="hljs-type">OutputFormat</span> <span class="hljs-variable">of</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">OutputFormat</span>();
of.setCDataElements(
<span class="hljs-keyword">new</span> <span class="hljs-title class_">String</span>[] { <span class="hljs-string">"^title"</span>, <span class="hljs-comment">// </span>
<span class="hljs-string">"^category"</span>,
<span class="hljs-string">"^url"</span>,
<span class="hljs-string">"^url_wap"</span>,
<span class="hljs-string">"^detail"</span>
}); <span class="hljs-comment">// </span>
<span class="hljs-comment">// set any other options you'd like</span>
of.setPreserveSpace(<span class="hljs-literal">true</span>);
of.setIndenting(<span class="hljs-literal">true</span>);
<span class="hljs-comment">// create the serializer</span>
<span class="hljs-type">ByteArrayOutputStream</span> <span class="hljs-variable">op</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">ByteArrayOutputStream</span>();
<span class="hljs-type">XMLSerializer</span> <span class="hljs-variable">serializer</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">XMLSerializer</span>(op, of);
<span class="hljs-type">SAXResult</span> <span class="hljs-variable">result</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">SAXResult</span>(serializer.asContentHandler());
<span class="hljs-type">Marshaller</span> <span class="hljs-variable">mar</span> <span class="hljs-operator">=</span> context.createMarshaller();
mar.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, <span class="hljs-literal">true</span>);
mar.marshal(obj, result);
<span class="hljs-keyword">return</span> op.toString(<span class="hljs-string">"utf-8"</span>);
}
}
setCDataElements 这里面你标注需 CDATA 的字段!
上面的这个例子可以直接拷贝运行,网上还一些其他的方法生成 xml 和 CDATA,如果你有好的方法,欢迎分享给我,谢谢!
4: 参考文章
(1):Jaxb2 转换 XML 文档
(2):Jaxb annotation 初步使用
(3):三步解决 JAXB 生成 XML 包含 CDATA 问题—JAVA 编程
欢迎访问我的 csdn 博客,我们一同成长!
"不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!"
http://blog.csdn.net/u010648555