`
qq123zhz
  • 浏览: 536127 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

xstream 的高级用法,自定义输出结构

    博客分类:
  • java
 
阅读更多

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>
 
分享到:
评论

相关推荐

    com.thoughtworks.xstream.XStream操作XML和java对象的一些用法

    XStream还提供了许多高级功能,比如自定义转换器来改变默认的XML表示,或者处理复杂的继承关系。此外,为了提高安全性,XStream提供了一种叫做"alias"的机制,可以将类名映射为更友好的XML标签。 总的来说,XStream...

    XStream简单应用实例

    **XStream简介** XStream是一款强大的Java库,用于将Java对象序列化为XML,反之亦然。它由Joe Walnes创建,提供了一种简洁而直观...了解和掌握XStream的基本用法和高级特性,能帮助开发者更高效地处理XML相关的任务。

    XStream Java下的使用

    例如,可以使用`ignoreUnknownElements()`方法忽略未知的XML元素,避免因XML结构变化导致的异常。 6. **处理集合** 当需要序列化集合时,XStream会生成一个包含元素的XML列表。例如,一个`ArrayList&lt;Person&gt;`会被...

    Xstream生成和解析xml.rar

    创建一个Java对象,然后使用Xstream的`toXML()`方法将其转换为XML字符串: ```java import com.thoughtworks.xstream.XStream; public class User { private String name; private int age; // 构造器、...

    XStream示例(含jar包)

    XStream 的主要优势在于它的简洁性和对复杂对象结构的良好处理能力,使得开发者可以快速地在 Java 对象和 XML 之间进行数据交换。 **XStream 的工作原理** XStream 的核心是两个主要组件:`Marshaller` 和 `...

    xstream 让javabean和xml互相转换

    如果需要自定义XML的输出,例如改变元素名或者添加额外的转换规则,可以使用`xstream.alias()`和`xstream.asAttribute()`等方法。 反序列化则是将XML字符串恢复为Java对象的过程。同样以User类为例: ```java User...

    android XMl 解析神奇xstream 三: 把复杂对象转换成对象

    此外,XStream还提供了其他高级特性,如忽略字段、自定义转换器、处理类型安全的泛型等。在实际项目中,根据需求选择合适的方式来定制XStream的配置,可以有效地管理XML序列化和反序列化的过程。 总之,XStream是一...

    Spring.3.x企业应用开发实战(完整版).part2

    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 ...

    Spring3.x企业应用开发实战(完整版) part1

    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 的使用方法、所需的依赖以及一个简单的示例。 首先,使用 Betwixt 需要导入以下三个核心库: 1. `commons-collections-3.2.jar`:提供集合操作的支持。 2. `commons-logging-...

Global site tag (gtag.js) - Google Analytics