JAXB XML生成CDATA類型的節點


試了好久才找到一個解決辦法,我是用的JAXB的,如果你們也是用JAXB那么可以直接借鑒此方法,別的方式你們自行測試吧

 

第一步:新增一個適配器類

package com.message.util;

import javax.xml.bind.annotation.adapters.XmlAdapter;

/**
 *AdapterCDATA適配器
 * @author user
 * @create 2020/7/23
 * @since 1.0.0
 */
public class AdapterCDATA extends XmlAdapter<String, String> {

    @Override
    public String marshal(String arg0) throws Exception {
        return "<![CDATA[" + arg0 + "]]>";
    }

    @Override
    public String unmarshal(String arg0) throws Exception {
        return arg0;
    }

}

第二步:在Marshaller的對象設置屬性(紅色字體部分)

private void createXML(CEB621Message ceb621Message, String put) {
        File file = new File(put);
        JAXBContext jc = null;
        try {
            //根據Person類生成上下文對象
            jc = JAXBContext.newInstance(CEB621Message.class);

            //從上下文中獲取Marshaller對象,用作將bean編組(轉換)為xml
            Marshaller ma = jc.createMarshaller();
            //以下是為生成xml做的一些配置.
            //設置屬性轉換特殊字符串
        ma.setProperty("com.sun.xml.internal.bind.marshaller.CharacterEscapeHandler",
      new CharacterEscapeHandler() {
      public void escape(char[] ch, int start,
int length, boolean isAttVal,Writer writer) throws IOException {
     writer.write(ch, start, length);
    }
    });
           //格式化輸出,即按標簽自動換行,否則就是一行輸出
            ma.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            //設置編碼(默認編碼就是utf-8)
            ma.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
            //是否省略xml頭信息,默認不省略(false)
            ma.setProperty(Marshaller.JAXB_FRAGMENT, false);
            //生成xml
            ma.marshal(ceb621Message, file);
            System.out.println("生成CEB621Message_" + ceb621Message.getInventory().get(0).getInventoryHead().getCopNo() + ".xml成功");
        } catch (JAXBException e) {
            e.printStackTrace();
            System.out.println("生成CEB621Message_" + ceb621Message.getInventory().get(0).getInventoryHead().getCopNo() + ".xml失敗");
        }
    }

第三步:在需要添加CDATA的JavaBean的屬性上面添加一條注解(紅色部分)

    @XmlJavaTypeAdapter(AdapterCDATA.class)
    @XmlElement(required = true, name = "consigneeAddress")
    protected String consigneeAddress;

 

然后生成即可,下面是生成的

 <ceb:buyerIdNumber>440105197510183999</ceb:buyerIdNumber>
 <ceb:buyerName>張三</ceb:buyerName>
 <ceb:consigneeAddress><![CDATA[北京市北京市東城區安定門外大街]]></ceb:consigneeAddress>
 <ceb:agentCode>4403468341</ceb:agentCode>

希望幫到有需要的朋友(^_^)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM