`
yunzhongxia
  • 浏览: 647447 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

XStream学习笔记二

    博客分类:
  • java
阅读更多

以下面的xml文件展开讨论。

<blog author="Guilherme Silveira">
  <entry>
    <title>first</title>
    <description>My first blog entry.</description>
  </entry>
  <entry>
    <title>tutorial</title>
    <description>
        Today we have developed a nice alias tutorial. Tell your friends! NOW!
    </description>
  </entry>
</blog>

 

1 首先定义结果几个model

  • Blog 对象包含一个Author对象和多个Author 对象
public class Blog {
	private Author writer;
	private List entries=new ArrayList();
	
	public void add(Entry ){
		entries.add(entry);
	}
	public List getContent(){
		return entries;
	}

	public Blog(Author writer){
		this.writer=writer;
	}
}
  •  Author对象包含了一个name属性
public class Author {

	private String name;

	public Author(String name) {
		this.name = name;
	}
	public String getName(){
		return name;
	}
}
  •  Entry对象包含了title,description两个属性
public class Entry {
	private String title,description;

	public Entry(String title, String description) {
		this.title = title;
		this.description = description;
	}
	
	

}

 

 

2 写一个简单的测试方法

/**
	 * @param args
	 */
	public static void main(String[] args) {
		Blog teamBlog=new Blog(new Author("hjn"));
		teamBlog.add(new Entry("first","My first blog entry"));
		teamBlog.add(new Entry("tutorial","Today we have developed a nice alias tutorial"));
		
		XStream stream=new XStream();
		String strXml=stream.toXML(teamBlog);
		System.out.println(strXml);
	}

 

看看运行的结果:

<org.utmost.util.xml.Blog>
  <writer>
    <name>hjn</name>
  </writer>
  <entries>
    <org.utmost.util.xml.Entry>
      <title>first</title>
      <description>My first blog entry</description>
    </org.utmost.util.xml.Entry>
    <org.utmost.util.xml.Entry>
      <title>tutorial</title>
      <description>Today we have developed a nice alias tutorial</description>
    </org.utmost.util.xml.Entry>
  </entries>
</org.utmost.util.xml.Blog>

 生成的xml文件跟我们设想的错的太远了。

问题一:修改类的名字

stream.alias("blog", Blog.class);
stream.alias("entry", Entry.class);

 再次运行看看结果

<blog>
  <writer>
    <name>hjn</name>
  </writer>
  <entries>
    <entry>
      <title>first</title>
      <description>My first blog entry</description>
    </entry>
    <entry>
      <title>tutorial</title>
      <description>Today we have developed a nice alias tutorial</description>
    </entry>
  </entries>
</blog>

 问题二:修改字段的别名:把writer改为author

stream.aliasField("author", Blog.class, "writer");

 

现在生成的xml如下:

<blog>
  <author>
    <name>hjn</name>
  </author>
  <entries>
    <entry>
      <title>first</title>
      <description>My first blog entry</description>
    </entry>
    <entry>
      <title>tutorial</title>
      <description>Today we have developed a nice alias tutorial</description>
    </entry>
  </entries>
</blog>

 

上面的xml与我们想要的xml快一致了。

问题三:忽略entries标签

stream.addImplicitCollection(Blog.class, "entries");

 

这样的结果才是我想要的

<blog>
  <author>
    <name>hjn</name>
  </author>
  <entry>
    <title>first</title>
    <description>My first blog entry</description>
  </entry>
  <entry>
    <title>tutorial</title>
    <description>Today we have developed a nice alias tutorial</description>
  </entry>
</blog>

 

问题四:修改属性的别名,把author做为blog 的一个属性。

stream.useAttributeFor(Blog.class, "writer");
stream.aliasField("author", Blog.class, "writer");

 

此时又产生了一个新的问题,xstream是不知道怎么把author转化为字符串作为xml的一个属性的。

为了解决这个问题,必须重写SingleValueConverter 方法。

package org.utmost.util.xml;

import com.thoughtworks.xstream.converters.SingleValueConverter;

public class AuthorConverter implements SingleValueConverter{

	@Override
	public Object fromString(String name) {
		return new Author(name);
	}

	@Override
	public String toString(Object obj) {
		return ((Author)obj).getName();
	}

	@Override
	public boolean canConvert(Class clazz) {
		return clazz.equals(Author.class);
	}

}

 

在测试方法中添加

stream.registerConverter(new AuthorConverter());

 

ok,来看看效果

<blog author="hjn">
  <entry>
    <title>first</title>
    <description>My first blog entry</description>
  </entry>
  <entry>
    <title>tutorial</title>
    <description>Today we have developed a nice alias tutorial</description>
  </entry>
</blog>

 

 

修改报名方法是

stream.aliasPackage(name, pkgName);

 

总结:

通过本篇学习我们知道了

  1. 修改包的别名
  2. 修改类的别名
  3. 修改字段的别名
  4. 把一个类作为一个属性

第四点得重写SingleValueConverter类的一些方法,在下一篇中我将重点介绍Converter

分享到:
评论
2 楼 yunzhongxia 2010-04-08  
addImplicitCollection
去你姑 写道
问题三:忽略entries标签

在读取的时候怎么忽略啊


读取出来的是对象,entries封装的是Blog对象集合,不用忽略。
1 楼 去你姑 2010-04-08  
问题三:忽略entries标签

在读取的时候怎么忽略啊

相关推荐

    xstream学习文档及实例

    在本学习文档中,我们将深入探讨 XStream 的核心概念、用法以及如何在实际项目中应用。 一、XStream 简介 XStream 能够将复杂的 Java 对象结构转换成易于读写的 XML 格式,同时也能将 XML 文档还原为对应的 Java ...

    《xStream完美转换XML、JSON》学习笔记

    《xStream完美转换XML、JSON》学习笔记 在IT领域,数据交换是常见的需求,而XML和JSON作为两种广泛使用的数据格式,它们之间的转换尤为重要。xStream是一个强大的Java库,它能够轻松地将Java对象序列化为XML或反...

    最齐全的xstream1.4.8.jar

    最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar 最齐全的xstream1.4.8.jar ...

    xstream-1.4.15.jar

    XStream 反序列化漏洞(CVE-2020-26258 & 26259),修复jar包 xstream-1.4.15.jar Xstream 是 Java 类库,用来将对象序列化成 XML (JSON) 或反序列化为对象。XStream 是一款开源软件,允许在 BSD 许可证的许可下分发...

    xstream-1.4.2.jar

    2. **自动映射**:XStream能够自动将Java类的字段映射到XML元素,无需额外的注解或配置。 3. **安全性**:XStream提供了安全模式,防止恶意的XML输入导致的安全漏洞,如XML注入攻击。 4. **自定义转换**:对于复杂...

    xstream最新版 - xstream-1.4.18.jar

    xstream最新版jar包

    xStream完整Jar包

    **XStream 概述** XStream 是一个 Java 库,用于将对象序列化为 XML,以及从 XML 反序列化回对象。它提供了一种简单而直观的...通过深入学习和实践,我们可以充分利用 XStream 的优点,提高代码的可读性和可维护性。

    Oracle Database XStream Guide 11g Release 2 (11.2)-302

    Oracle Database XStream Guide 11g Release 2 (11.2)-302 Oracle Database XStream 是 Oracle 公司推出的一个数据捕获和事件处理工具,旨在帮助用户实时捕获和处理数据库中的数据变化。下面是 Oracle Database ...

    xstream1.4.15.JAR

    2. 启用 `autodetectAnnotations` 功能,让 XStream 自动处理注解以限制反序列化的类。 3. 使用安全的序列化库,如 Jackson 或 Google's Protobuf,它们提供了更好的安全防护机制。 4. 对所有传入的序列化数据进行...

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

    XStream库提供了一个简单、直观的方式来实现这种转换,使得XML序列化和反序列化变得非常方便。本篇将详细介绍XStream如何处理XML与Java对象的相互转换,以及如何处理List、Map等集合类型的数据。 首先,XStream是一...

    xstream-1.4.5.jar

    xstream xstream-1.4.5.jar

    xstream-1.3.1.zip

    2. 自定义转换器:如果默认的自动映射不能满足需求,用户可以通过自定义转换器来控制特定类的XML表示方式。 3. 安全性增强:XStream 1.3.1版本对安全性进行了改进,可以防止恶意代码注入攻击,这在处理不受信任的...

    xStream学习xml,JASON,JAVA对象转换

    这篇博客文章,标题为“xStream学习xml,JASON,JAVA对象转换”,显然会探讨如何利用XStream来处理这两种数据格式。 XStream的核心功能在于其简单易用的API,可以将Java对象直接序列化成XML或JSON字符串,同时也能...

    xstream相关的jar包

    2. **dom4j-1.6.1.jar**:DOM4J是一个流行的Java XML API,它提供了一套全面而强大的处理XML、XPath和DOM的工具。XStream使用DOM4J作为其默认的DOM提供商,用于解析和构建XML文档。 3. **xpp3_min-1.1.4c.jar**:这...

    xstream-1.4.19.jar

    xstream-1.4.19.jar

    Java用xStream拼接xml

    当需要将数据转换为XML格式以便于传输或处理时,工具如xStream就显得尤为重要。Java中的xStream库提供了一个简单易用的方式来将Java对象序列化为XML,反之亦然,即反序列化XML回Java对象。 **xStream简介** xStream...

    xstream解析依赖包

    《XStream解析依赖包详解》 在Java开发中,数据序列化是一个不可或缺的环节,它使得对象的状态可以被保存和恢复。XStream是一款强大的Java库,用于将Java对象转换为XML,反之亦然,极大地简化了序列化和反序列化的...

    xstream教程资料.rar

    二、XStream的安装与配置 在Java项目中引入XStream库,通常通过Maven或Gradle进行依赖管理。配置完成后,可以通过`com.thoughtworks.xstream.XStream`类实例化对象,开始进行对象到XML或XML到对象的转换。 三、...

    xstream-1.4.8最齐全的jar包

    2. **类型安全**:XStream支持类型安全的转换,确保在反序列化时能正确地恢复原来的对象类型,避免了类型转换异常。 3. **自定义转换器**:对于复杂的对象结构或者特殊类型的转换,可以通过实现`Converter`接口来自...

    xstream-1.4.20.jar

    xstream-1.4.20.jar

Global site tag (gtag.js) - Google Analytics