三步解决JAXB生成XML包含CDATA问题
废话不多说,写此文档的目的就是为了帮助java开发者,解决利用JAXB生成XML时,XML中带有CDATA问题。 分三步走: 首先创建适配器类:CDataAdapter.java package com.zhaoyx; import javax.xml.bind.annotation.adapters.XmlAdapter; //有时候 Java 类不能自然映射到自己所需的 XML 形式, //这时需要编写自己的适配器类,通过注解绑定到javabean的成员变量上, //在运行的时候jaxb框架自动会适配你所编写的适配器类的方法, //CDataAdapter.marshal(String str),将javabean的成员变量的value值 //转变成你想要的形式。 public class CDataAdapter extends XmlAdapter<String,String> { //从javabean到xml的适配方法 @Override //从xml到javabean的适配方法 其次创建JAXB生成XML的工具类:JaxbToXmlUtil.java package com.zhaoyx; import java.io.IOException; import javax.xml.bind.JAXBContext; import com.sun.xml.internal.bind.marshaller.CharacterEscapeHandler; //这里用到了JAXB的核心类和方法,不懂可以去查看下JAXB基础应用, //这里只做关键解释。 public class JaxbToXmlUtil { public static String convertToXml(Object obj,String encoding) { //去掉生成xml的默认报文头。 //转换所有的适配字符,包括xml实体字符<和>,xml实体字符在好多处理xml //的框架中是处理不了的,除非序列化。 StringWriter writer = new StringWriter(); //添加自己想要的xml报文头 return result; 最后创建用于转换成XML文件的javabean:Root.java package com.zhaoyx; import javax.xml.bind.annotation.XmlAccessType; @XmlRootElement //绑定自己的适配器类,适配希望包含在CData数据块中的javabean成员变量。 //这里的空值是为了测试,无其他涵义。 @XmlJavaTypeAdapter(CDataAdapter.class) @XmlJavaTypeAdapter(CDataAdapter.class) private String id; public String getName() { public void setName(String name) { public String getSurname() { public void setSurname(String surname) { public String getId() { public void setId(String id) { } 上面三步就可以解决利用JAXB生成XML时,XML中包含CDATA数据块的问题。 下面是用于测试的类:JaxbTest.java package com.zhaoyx;
public static void main(String[] arg) { Root root = new Root(); //由于在javabean中赋值为空,这句可以不要,也可以去掉javabean中的赋空值语句 } 控制台输出结果: <?xml version='1.0' encoding='GBK'?> <root> <name><![CDATA[]]></name> <surname><![CDATA[jiiii]]></surname> <id>ddd</id> </root> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |