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

百度java生成xml,有一大推的文章,主要的生成方式一种使用Dom4J ,还有一种使用Jdk自带注解类! 下面主要整理我注解类的使用,(可以参考这篇文章Dom4J生成xml和包含CDATA问题)和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编程

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121233.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • golang2021激活码【2021免费激活】

    (golang2021激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html2JTX0APX6F-eyJsaWNlbnNlSWQi…

    2022年3月29日
    103
  • 如何自动发送短信给女朋友

    如何自动发送短信给女朋友

    2021年9月17日
    77
  • vue遍历渲染数组「建议收藏」

    vue遍历渲染数组「建议收藏」<divv-for=”iteminuserAllInfo.adevarUserSkills”:key=”item.id”>{{item}}</div>v-for=”单个数据in数组”:key=“单个数据.主键”(主键唯一)不是对象无需主键

    2022年10月7日
    2
  • spss聚类分析的简单例题_聚类分析的简单例题

    spss聚类分析的简单例题_聚类分析的简单例题一、什么是聚类分析聚类分析指将物理或抽象对象的集合分组为由类似的对象组成的多个类的分析过程。它是一种重要的人类行为。聚类分析的目标就是在相似的基础上收集数据来分类。聚类源于很多领域,包括数学,计算机科学,统计学,生物学和经济学。在不同的应用领域,很多聚类技术都得到了发展,这些技术方法被用作描述数据,衡量不同数据源间的相似性,以及把数据源分类到不同的簇中。——《百度百科–聚类分析》二、基本步…

    2022年8月31日
    4
  • 96 年美女胜出!那个有关“猪脸识别”的比赛决出冠军啦

    96 年美女胜出!那个有关“猪脸识别”的比赛决出冠军啦点击上方“程序员小灰”,选择“置顶公众号”有趣有内涵的文章第一时间送达!还记得前段时间风靡技术界的“猪脸识别”吗?据了解,在知乎上与此有关的仅仅一个问题的浏览量就超过了35万,”猪脸识别”是JDD-2017京东金融全球数据探索者大赛的四大赛题之一,自从京东金融JDD大赛启动,就掀起了好大一波关注。而最近,这个与“猪脸识别”有关的JDD—2017京东金融全球数据探索者大赛经过多轮

    2022年6月21日
    27
  • pycharm下的多个python版本共存(一)

    pycharm下的多个python版本共存(一)

    2021年10月22日
    62

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号