jaxb不能直接生成带有CDATA区域的xml
来源:互联网 发布:matlab 定义矩阵函数 编辑:程序博客网 时间:2024/05/20 11:36
jaxb不能直接生成带有CDATA区域的xml,找了好多的文章,测试类如下:
--------类(从网上找的一个类)------
package com;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class People {
public String id="001";
public String name="灰太狼";
public int age=26;
}
------------借鉴JaxbCDATASample.java----------------
package com;
import java.io.File;
import java.io.PrintStream;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.transform.sax.SAXResult;
import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;
public class JaxbCDATASample {
@SuppressWarnings("deprecation")
public static void main(String[] args) throws Exception {
// unmarshal a doc
JAXBContext jc = JAXBContext.newInstance(People.class);
Unmarshaller u = jc.createUnmarshaller();
File f = new File("src/people.xml");
Object o = u.unmarshal(f);
// create a JAXB marshaller
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_ENCODING, "utf-8");
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false);
// get an Apache XMLSerializer configured to generate CDATA
XMLSerializer serializer = getXMLSerializer();
// marshal using the Apache XMLSerializer
SAXResult result = new SAXResult( serializer.asContentHandler() );
m.marshal(o, result);
// System.out.println();
// m.getNode(o);
//System.out.println("===="+ ContentHandler);
}
private static XMLSerializer getXMLSerializer() {
// configure an OutputFormat to handle CDATA
OutputFormat of = new OutputFormat();
// specify which of your elements you want to be handled as CDATA.
// The use of the '^' between the namespaceURI and the localname
// seems to be an implementation detail of the xerces code.
// When processing xml that doesn't use namespaces, simply omit the
// namespace prefix as shown in the third CDataElement below.
of.setCDataElements(
new String[] { "^id", //
"^name", //
"^age" }); //
// set any other options you'd like
of.setPreserveSpace(true);
of.setIndenting(true);
StringWriter writer = new StringWriter();
// create the serializer
XMLSerializer serializer = new XMLSerializer(of);
serializer.setOutputByteStream(System.out);
return serializer;
}
}
-----------------------------------------------------
最后运行结果打印到控制台:
< ?xml version="1.0" encoding="UTF-8"?>
< people><id><![CDATA[001]]></id><name><![CDATA[灰太狼]]></name><age><![CDATA[26]]></age></people>
--------类(从网上找的一个类)------
package com;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class People {
public String id="001";
public String name="灰太狼";
public int age=26;
}
------------借鉴JaxbCDATASample.java----------------
package com;
import java.io.File;
import java.io.PrintStream;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.transform.sax.SAXResult;
import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;
public class JaxbCDATASample {
@SuppressWarnings("deprecation")
public static void main(String[] args) throws Exception {
// unmarshal a doc
JAXBContext jc = JAXBContext.newInstance(People.class);
Unmarshaller u = jc.createUnmarshaller();
File f = new File("src/people.xml");
Object o = u.unmarshal(f);
// create a JAXB marshaller
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_ENCODING, "utf-8");
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false);
// get an Apache XMLSerializer configured to generate CDATA
XMLSerializer serializer = getXMLSerializer();
// marshal using the Apache XMLSerializer
SAXResult result = new SAXResult( serializer.asContentHandler() );
m.marshal(o, result);
// System.out.println();
// m.getNode(o);
//System.out.println("===="+ ContentHandler);
}
private static XMLSerializer getXMLSerializer() {
// configure an OutputFormat to handle CDATA
OutputFormat of = new OutputFormat();
// specify which of your elements you want to be handled as CDATA.
// The use of the '^' between the namespaceURI and the localname
// seems to be an implementation detail of the xerces code.
// When processing xml that doesn't use namespaces, simply omit the
// namespace prefix as shown in the third CDataElement below.
of.setCDataElements(
new String[] { "^id", //
"^name", //
"^age" }); //
// set any other options you'd like
of.setPreserveSpace(true);
of.setIndenting(true);
StringWriter writer = new StringWriter();
// create the serializer
XMLSerializer serializer = new XMLSerializer(of);
serializer.setOutputByteStream(System.out);
return serializer;
}
}
-----------------------------------------------------
最后运行结果打印到控制台:
< ?xml version="1.0" encoding="UTF-8"?>
< people><id><![CDATA[001]]></id><name><![CDATA[灰太狼]]></name><age><![CDATA[26]]></age></people>
- jaxb不能直接生成带有CDATA区域的xml
- JAXB生成CDATA类型的节点
- XML不能被忽略的CDATA
- 在XSLT中输出内容带有CDATA的XML节点
- 在XSLT中输出内容带有CDATA的XML节点
- JAXB生成XML文件的格式化
- jaxb常用的生成xml范例
- 用jaxb通过XSD生成Java类的CDATA的处理
- 用jaxb通过XSD生成Java类的CDATA的处理
- 解决用jaxb通过XSD生成Java类的CDATA的不生效处理
- JAXB将JAVA对象转换为XML时CDATA的问题
- JAXB将JAVA对象转换为XML时CDATA的问题
- JAXB生成xml
- JAXB解析生成xml
- Java JAXB 生成xml
- 处理 XML 数据:有效地使用 CDATA 区域
- 如何用XSLT生成带CDATA段的xml文档
- dom4j生成XML报文以及CDATA值的设置
- java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Can't start a cloned connection wh
- WinPcap与Unix兼容的函数
- 批处理程序学习
- ios 消除 字符串 首尾空格
- RTSP实例分析
- jaxb不能直接生成带有CDATA区域的xml
- How To Develop a jQuery Plugin
- android 上八款优秀的开源游戏引擎
- js数组的操作
- PVR: Failed to set pixel format for dummy PFD
- Android中自定义Dialog外形,去除黑底和白色边框
- Java 学习笔记11:Spring MVC 中的基于注解的 Controller
- break , continue , exit 的区别
- Eclipse Java注释模板设置详解