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>
原创粉丝点击