xstream如何将java对象转化成有cdata的xml
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xstream如何将java对象转化成有cdata的xml相关的知识,希望对你有一定的参考价值。
实体类要加注解
实体类要加注解@XStreamAlias("msg")
public class Msg implements Serializable
private static final long serialVersionUID = 3196422897798539811L;
@XStreamAsAttribute
private String toUid;
@XStreamAsAttribute
private String fromUid;
@XStreamAsAttribute
private String flag;
@XStreamAsAttribute
private String time;
@XStreamAlias("content")
private String content;
@XStreamAlias("user")
private String user;
//省略geter、seter
然后写个工具类
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
public class SerializeXmlUtil
/**
* java对象转化成xml字符串
* @param obj java对象实例
* @return String xml字符串
*/
public static String serializeToXml(Object obj)
//XStream xstream = new XStream();
//直接用jaxp dom来解释
//XStream xstream=new XStream(new DomDriver());
//指定编码解析器,直接用jaxp dom来解释
XStream xstream=new XStream(new DomDriver("utf-8"));
//如果没有这句,xml中的根元素会是<包.类名>
//或者说:注解根本就没生效,所以的元素名就是类的属性
xstream.processAnnotations(obj.getClass());
StringBuffer xmlstrbuf = new StringBuffer();
xmlstrbuf.append("<?xml version=\\"1.0\\"?>");
xmlstrbuf.append("\\r\\n");
xmlstrbuf.append(xstream.toXML(obj));
return xmlstrbuf.toString();
/**
* 将传入xml字符串转化为java对象
* @param xmlstr
* @param cls xml对应的class类
* @return T xml对应的class类的实例对象
* 调用的方法实例:PersonBean person=XmlUtil.toBean(xmlStr, PersonBean.class);
*/
public static <T> T deSerizalizeFromXml(String xmlstr, Class<T> cls) throws Exception
//注意:不是new Xstream();否则报错:java.lang.NoClassDefFoundError:
//org/xmlpull/v1/XmlPullParserFactory
XStream xstream = new XStream(new DomDriver());
xstream.processAnnotations(cls);
T obj = (T) xstream.fromXML(xmlstr);
return obj;
参考技术A private static XStream xstream = new XStream(new XppDriver()
public HierarchicalStreamWriter createWriter(Writer out)
return new PrettyPrintWriter(out)
// 对所有xml节点的转换都增加CDATA标记
boolean cdata = true;
@SuppressWarnings("unchecked")
public void startNode(String name, Class clazz)
super.startNode(name, clazz);
protected void writeText(QuickWriter writer, String text)
if (cdata)
writer.write("<![CDATA[");
writer.write(text);
writer.write("]]>");
else
writer.write(text);
;
); 参考技术B 网上很多。百度。
谁用过Xstream 用其生成带有cdata标签的xml解析带有cdata标签的xml
参考技术A CDATA在XML规范里代表其内部数据不要转义,即<, >等字符在内不会被解释。解析这样的xml的时候,解释器会将其内容原样读取,不用作任何的特殊处理的。追问
我想知道的是用xstream从javabean转换成xml,生成的xml带有:列如
compareType>的标签
CDATASection一般dom组件会有一个这样的对象,或者类似名称的。
writer遇到这个就会写入CDATA节点。
以上是关于xstream如何将java对象转化成有cdata的xml的主要内容,如果未能解决你的问题,请参考以下文章
谁用过Xstream 用其生成带有cdata标签的xml解析带有cdata标签的xml