您可以执行以下操作:
适配器CDATA
package forum14193944;import javax.xml.bind.annotation.adapters.XmlAdapter;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; }}根
该
@XmlJavaTypeAdapter注释用于指定的
XmlAdapter应该被使用。
package forum14193944;import javax.xml.bind.annotation.*;import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;@XmlRootElement@XmlAccessorType(XmlAccessType.FIELD)public class Root { @XmlJavaTypeAdapter(AdapterCDATA.class) private String name; @XmlJavaTypeAdapter(AdapterCDATA.class) private String surname; @XmlJavaTypeAdapter(AdapterCDATA.class) private String id;}演示版
我必须包装
System.out一个
OutputStreamWriter以获得所需的效果。另请注意,设置
CharacterEscapeHandler方法意味着它负责该操作的所有转义处理
Marshaller。
package forum14193944;import java.io.*;import javax.xml.bind.*;import com.sun.xml.bind.marshaller.*;public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(Root.class); Unmarshaller unmarshaller = jc.createUnmarshaller(); File xml = new File("src/forum14193944/input.xml"); Root root = (Root) unmarshaller.unmarshal(xml); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.setProperty(CharacterEscapeHandler.class.getName(), new CharacterEscapeHandler() { @Override public void escape(char[] ac, int i, int j, boolean flag, Writer writer) throws IOException { writer.write(ac, i, j); } }); marshaller.marshal(root, new OutputStreamWriter(System.out)); }}input.xml /输出
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><root> <name><![CDATA[<h1>kshitij</h1>]]></name> <surname><![CDATA[<h1>solanki</h1>]]></surname> <id><![CDATA[0]]></id></root>



