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>440105197510183320</ceb:buyerIdNumber>
<ceb:buyerName>张三</ceb:buyerName>
<ceb:consigneeAddress><![CDATA[北京市北京市东城区安定门外大街]]></ceb:consigneeAddress>
<ceb:agentCode>4403468341</ceb:agentCode>
希望帮到有需要的朋友(^_^)
JAXB XML生成CDATA类型的节点的更多相关文章
- C#调用XmlSerializer序列化时生成CDATA节点解决方法
public class Person{ public string Name { get; set; } public int Age { get; set; } } 引用 ...
- ibatis中的cdata和xml中cdata的含义
ibatis的cdata用于sqlmap文件中,二sqlmap本身就是xml文件,即解析cdata的方法与xml文件的cdata相同. 简单来说:cdata就是用来表明纯文本的,如果没有这个的话 &l ...
- [CXF REST标准实战系列] 一、JAXB xml与javaBean的转换(转)
转自:[CXF REST标准实战系列] 一.JAXB xml与javaBean的转换 文章Points: 1.不认识到犯错,然后得到永久的教训. 2.认识JAXB 3.代码实战 1.不认识到犯错,然后 ...
- xml schema复杂类型
xml schema复杂类型 对于复杂类型,xs:complexType, xs:sequence子节点必须有. <?xml version="1.0"?> <x ...
- 通过xml生成word文档
Xml生成word总结 使用xml生成word的基本步骤在<使用xslt转化xml数据形成word文档导出.doc>中说明比较清楚了.但是其中的细节并未说到,因此自己折腾了两天总算成功了. ...
- JAVA JDOM解析XML 带CDATA数据
import java.io.StringReader;import java.util.*; import org.jdom.Document;import org.jdom.Element;imp ...
- 根据xml生成相应的对象类
根据xml生成相应的class对象,听起来很难其实很简单,用xsd.exe就能办到 打开vs 命令行运行xsd.exe 你的xml文件地址 空格/outputdir:存放xsd的地址 ok,这是生成了 ...
- XML中CDATA和#PCDATA的区别
在XML文档中, 能看到“CDATA"的地方有三处: 1)在DTD中,指定标签中某个属性的类型为字符型时,使用CDATA.因为XML解析器会去分析这段字符内容,因而里面如果需要使用>, ...
- 【转】JavaScript获取节点类型、节点名称和节点值
DOM节点信息包括节点类型(nodeType).节点名称(nodeName)和节点值(nodeValue). 节点类型 DOM节点中,每个节点都拥有不同的类型.W3C规范中常用的 DOM节点类型有以下 ...
随机推荐
- Idea配置JRebel插件的详细配置及图解
Idea最新JRebel插件的详细配置及图解 地址:https://blog.csdn.net/nyotengu/article/details/80629631#commentBox Ⅰ安装jreb ...
- 【秒懂Java】【第1章_初识Java】02_软件开发
通过上一篇文章<01_编程语言>,我们了解到 Java是众多编程语言中的其中一种 编程语言可以用来开发软件 因此,我们即将要学习的Java技术,是属于软件开发的范畴.那软件开发的前景如何呢 ...
- jquery入门(2)
3.jQuery常用方法 3.1 dom属性相关方法 addClass() 为每个匹配的元素添加指定的样式名 $('div').addClass('box'); //为页面中所有的div添加一个box ...
- 文档翻译经验分享(Markdown)
该教程基于VSCode 加一些插件 youdao translate https://marketplace.visualstudio.com/items?itemName=Yao-Translate ...
- 【floyd+矩阵乘法】POJ 3613 Cow Relays
Description For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a rel ...
- 讲讲 Promise
一.什么是 Promise 1.1 Promise 的前世今生 Promise 最早出现在 1988 年,由 Barbara Liskov.Liuba Shrira 首创(论文:Promises: L ...
- LoadLibraryA与GetProcAddress介绍
0x00 函数原型 HMODULE LoadLibraryA( LPCTSTR lpLibFileName//模块的的的名字 ) FARPROC GetProcAddress( HMODULE ...
- DLL注入之修改PE静态注入
DLL注入之修改PE静态注入 0x00 前言 我们要注入的的力量功能是下载baidu首页数据.代码如下: #include "stdio.h" #include"stdi ...
- 快讯:asuldb再立功,捕获史前大蛤
蛤蛤日报7月7日讯 (蛤媒体记者 申蛤 戌蛤) 昨日下午,asuldb成功于生物实验室捕获史前大蛤.据考证,史前大蛤是一种名为楠楠的生物.这种生物体型庞大,距今已有至少1e18年的寿命.这种大蛤行为古 ...
- shell进阶篇之字典和数组结合应用案例
# 现在我们用字典结合数组来实现一个简单的远程管理机 远程管理机的需求:现在需要在一个管理机上实现下列两点内容: 1.需要可以实时查看现有项目运行状态 2.远程登陆任意一台机器 备注:现有的机器如下 ...