public static void main(String[] args) {
XStream xstream = new XStream(new XppDriver() {
public HierarchicalStreamWriter createWriter(Writer out) {
return new PrettyPrintWriter(out) {
boolean cdata = false;
@Override
public void startNode(String name, Class clazz) {
super.startNode(name, clazz);
cdata = (name.equals("converter") || name
.equals("name"));
}
@Override
protected void writeText(QuickWriter writer, String text) {
if (cdata) {
writer.write("<![CDATA[");
writer.write(text);
writer.write("]]>");
} else {
writer.write(text);
}
}
};
}
});
// XppDriver xppDriver = new XppDriver(new XmlFriendlyReplacer(”__”, “_”)) {
// public HierarchicalStreamWriter createWriter(Writer out){
// return new PrettyPrintWriter(out,super.xmlFriendlyReplacer()) {
// protected void writeText(QuickWriter writer,String text) {
// writer.write(”<![CDATA[");
// writer.write(text);
// writer.write("]]>”);
// }
// };
// }
// };
// XStream xStream = new XStream(xppDriver);
xstream.registerConverter(new PersonConverter());
xstream.alias("converter", Person.class);
System.out.println(xstream.toXML(new Person("zzz","123","ssdsd")));
package converter;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
public class PersonConverter implements Converter {
public boolean canConvert(Class clazz) {
return clazz.equals(Person.class);
}
/**
**Marshal方法是用来将对象转换为XML的,他有三个参数:
1,我们准备转换的对象
2,我们准备输出对象的writer
3,当前的marshaling context
*/
@Override
public void marshal(Object value, HierarchicalStreamWriter writer,
MarshallingContext context) {
Person person = (Person) value;
//创建一个叫做fullname的节点,并将person的名字传给他
//可以任意次数的调用start/end node方法,但需要记住,你必须在打开一个节点之后记住关闭它。
//一般来说,执行转换的操作在setValue方法调用时发生
writer.startNode("fullname");
writer.setValue(person.getName());
writer.endNode();
writer.startNode("age");
writer.setValue(person.getAge());
writer.endNode();
}
@Override
public Object unmarshal(HierarchicalStreamReader reader,
UnmarshallingContext context) {
Person person = new Person();
//使用moveDown和moveUp方法在节点树层次中移动,所以,这里我们只需要简单的moveDown,得到值,再moveUp
reader.moveDown();
person.setName(reader.getValue());
reader.moveUp();
return person;
}
}
输出结果:
<converter>
<fullname><![CDATA[zzz]]></fullname>
<age><![CDATA[123]]></age>
</converter>
分享到:
相关推荐
XStream还提供了许多高级功能,比如自定义转换器来改变默认的XML表示,或者处理复杂的继承关系。此外,为了提高安全性,XStream提供了一种叫做"alias"的机制,可以将类名映射为更友好的XML标签。 总的来说,XStream...
**XStream简介** XStream是一款强大的Java库,用于将Java对象序列化为XML,反之亦然。它由Joe Walnes创建,提供了一种简洁而直观...了解和掌握XStream的基本用法和高级特性,能帮助开发者更高效地处理XML相关的任务。
例如,可以使用`ignoreUnknownElements()`方法忽略未知的XML元素,避免因XML结构变化导致的异常。 6. **处理集合** 当需要序列化集合时,XStream会生成一个包含元素的XML列表。例如,一个`ArrayList<Person>`会被...
创建一个Java对象,然后使用Xstream的`toXML()`方法将其转换为XML字符串: ```java import com.thoughtworks.xstream.XStream; public class User { private String name; private int age; // 构造器、...
XStream 的主要优势在于它的简洁性和对复杂对象结构的良好处理能力,使得开发者可以快速地在 Java 对象和 XML 之间进行数据交换。 **XStream 的工作原理** XStream 的核心是两个主要组件:`Marshaller` 和 `...
如果需要自定义XML的输出,例如改变元素名或者添加额外的转换规则,可以使用`xstream.alias()`和`xstream.asAttribute()`等方法。 反序列化则是将XML字符串恢复为Java对象的过程。同样以User类为例: ```java User...
此外,XStream还提供了其他高级特性,如忽略字段、自定义转换器、处理类型安全的泛型等。在实际项目中,根据需求选择合适的方式来定制XStream的配置,可以有效地管理XML序列化和反序列化的过程。 总之,XStream是一...
14.2.3 使用XStream别名 14.2.4 XStream转换器 14.2.5 XStream注解 14.2.6 流化对象 14.2.7 持久化API 14.2.8 额外功能:处理JSON 14.3 其他常见O/X Mapping开源项目 14.3.1 JAXB 14.3.2 XMLBeans 14.3.3 Castor ...
14.2.3 使用XStream别名 14.2.4 XStream转换器 14.2.5 XStream注解 14.2.6 流化对象 14.2.7 持久化API 14.2.8 额外功能:处理JSON 14.3 其他常见O/X Mapping开源项目 14.3.1 JAXB 14.3.2 XMLBeans 14.3.3 Castor ...
在本文中,我们将详细介绍 Betwixt 的使用方法、所需的依赖以及一个简单的示例。 首先,使用 Betwixt 需要导入以下三个核心库: 1. `commons-collections-3.2.jar`:提供集合操作的支持。 2. `commons-logging-...