Xstream之常用方式与常用注解
2016-01-04 15:58
218 查看
参考资料
1 xStream框架完美实现Java对象和xml文档JSON、XML相互转换
/article/4791848.html
2 xStream完美转换XML、JSON
http://archive.cnblogs.com/a/2025197/
官网:http://xstream.codehaus.org/download.html
相关jar包可在:
XStream之初识
/article/3885740.html下载
示例代码
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
Blog teamBlog = new Blog(new Author("Guilherme Silveira"));
teamBlog.add(new Entry("first","My first blog entry."));
eamBlog.add(new Entry("tutorial","Today we have developed a nice alias tutorial. Tell your friends! NOW!"));
XStream xstream = new XStream();
System.out.println(xstream.toXML(teamBlog));
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
Blog teamBlog = new Blog(new Author("Guilherme Silveira"));
teamBlog.add(new Entry("first","My first blog entry."));
eamBlog.add(new Entry("tutorial","Today we have developed a nice alias tutorial. Tell your friends! NOW!"));
XStream xstream = new XStream();
System.out.println(xstream.toXML(teamBlog));
打印结果为:
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
<xtream.Blog>
<writer>
<name>Guilherme Silveira</name>
</writer>
<entries>
<xtream.Entry>
<title>first</title>
<description>My first blog entry.</description>
</xtream.Entry>
<xtream.Entry>
<title>tutorial</title>
<description>Today we have developed a nice alias tutorial. Tell your friends! NOW!</description>
</xtream.Entry>
</entries>
</xtream.Blog>
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
<xtream.Blog>
<writer>
<name>Guilherme Silveira</name>
</writer>
<entries>
<xtream.Entry>
<title>first</title>
<description>My first blog entry.</description>
</xtream.Entry>
<xtream.Entry>
<title>tutorial</title>
<description>Today we have developed a nice alias tutorial. Tell your friends! NOW!</description>
</xtream.Entry>
</entries>
</xtream.Blog>
以上节点就包含了包名,如包名很长,就很难看了,怎样才能重新命名这个节点呀!
以下的1,2设置效果一样
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
1 //xstream.aliasPackage("", "xtream");
2 xstream.alias("blog", Blog.class);
3 xstream.alias("entry", Entry.class);
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
1 //xstream.aliasPackage("", "xtream");
2 xstream.alias("blog", Blog.class);
3 xstream.alias("entry", Entry.class);
通过这样设置就完成了节点名称的设置.如下:
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
<blog>
<writer>
<name>Guilherme Silveira</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. Tell your friends! NOW!</description>
</entry>
</entries>
</blog>
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
<blog>
<writer>
<name>Guilherme Silveira</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. Tell your friends! NOW!</description>
</entry>
</entries>
</blog>
修改子节点属性名称
将writer属性名称修改为:autor
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
xstream.aliasField("author", Blog.class, "writer");
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
xstream.aliasField("author", Blog.class, "writer");
输出如下:
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
<blog>
<author>
<name>Guilherme Silveira</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. Tell your friends! NOW!</description>
</entry>
</entries>
</blog>
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
<blog>
<author>
<name>Guilherme Silveira</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. Tell your friends! NOW!</description>
</entry>
</entries>
</blog>
删除集合节点名称的设置
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
xstream.addImplicitCollection(Blog.class, "entries");
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
xstream.addImplicitCollection(Blog.class, "entries");
输出如下:
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
<blog>
<author>
<name>Guilherme Silveira</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. Tell your friends! NOW!</description>
</entry>
</blog>
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
<blog>
<author>
<name>Guilherme Silveira</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. Tell your friends! NOW!</description>
</entry>
</blog>
将Blog类的元素设置为:它的节点属性
//使用这个属性名作为节点上的元素
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
xstream.useAttributeFor(Blog.class, "writer");
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
xstream.useAttributeFor(Blog.class, "writer");
//重新命名
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
xstream.aliasField("author", Blog.class, "writer");
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
xstream.aliasField("author", Blog.class, "writer");
//注册转换器
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
xstream.registerConverter(new AuthorConverter());
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
xstream.registerConverter(new AuthorConverter());
转换器:
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
import com.thoughtworks.xstream.converters.SingleValueConverter;
class AuthorConverter implements SingleValueConverter {
//显示节点属性值
public String toString(Object obj) {
return ((Author) obj).getName();
}
public Object fromString(String name) {
return new Author(name);
}
public boolean canConvert(Class type) {
return type.equals(Author.class);
}
}
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
import com.thoughtworks.xstream.converters.SingleValueConverter;
class AuthorConverter implements SingleValueConverter {
//显示节点属性值
public String toString(Object obj) {
return ((Author) obj).getName();
}
public Object fromString(String name) {
return new Author(name);
}
public boolean canConvert(Class type) {
return type.equals(Author.class);
}
}
显示结果:
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
<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>
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
<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>
注解的使用方式,使用之前必须加上注解类才有作用:
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
XStream xstream = new XStream();
xstream.processAnnotations(Blog.class);
xstream.processAnnotations(Entry.class);
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
XStream xstream = new XStream();
xstream.processAnnotations(Blog.class);
xstream.processAnnotations(Entry.class);
1 @XStreamAlias注解可在类与属性上使用设置名称,相当于: xstream.alias("blog", Blog.class);
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
@XStreamAlias("blog")
public class Blog {
@XStreamAlias("author")
private Author writer;
.....
}
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
@XStreamAlias("blog")
public class Blog {
@XStreamAlias("author")
private Author writer;
.....
}
当然Entry类也要设置同样的类属性:@XStreamAlias("entity")
2 @XStreamImplicit去集合节点名:相当于 xstream.addImplicitCollection(Blog.class, "entries");
3 @XStreamConverter(AuthorConverter.class),参见以上的转换器类相当于:
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
xstream.useAttributeFor(Blog.class, "writer");
//重新命名
xstream.aliasField("author", Blog.class, "writer");
//注册转换器
xstream.registerConverter(new AuthorConverter());
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
xstream.useAttributeFor(Blog.class, "writer");
//重新命名
xstream.aliasField("author", Blog.class, "writer");
//注册转换器
xstream.registerConverter(new AuthorConverter());
要使用这个注解AuthorConverter必须符合二个条件
a 必须要有个默认的无参构造函数
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
public AuthorConverter() {
}
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
public AuthorConverter() {
}
b 类声明必须为:public
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
public class AuthorConverter implements SingleValueConverter {
...
}
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
public class AuthorConverter implements SingleValueConverter {
...
}
不用注解这二点都可以不强制要求!
完整代码如下:
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
@XStreamAlias("blog")
public class Blog {
@XStreamAsAttribute
@XStreamAlias("author")
@XStreamConverter(AuthorConverter.class)
private Author writer;
@XStreamImplicit
private List entries = new ArrayList();
public Blog(Author writer) {
this.writer = writer;
}
public void add(Entry entry) {
entries.add(entry);
}
public List getContent() {
return entries;
}
public static void main(String[] args) {
Blog teamBlog = new Blog(new Author("Guilherme Silveira"));
teamBlog.add(new Entry("first", "My first blog entry."));
teamBlog
.add(new Entry("tutorial",
"Today we have developed a nice alias tutorial. Tell your friends! NOW!"));
XStream xstream = new XStream();
xstream.processAnnotations(Blog.class);
xstream.processAnnotations(Entry.class);
// 重新命名节点名
// xstream.aliasPackage("", "xtream");
/*
* xstream.alias("blog", Blog.class); xstream.alias("entry",
* Entry.class); //重新命名属性名 // xstream.aliasField("author", Blog.class,
* "writer"); //去节点 xstream.addImplicitCollection(Blog.class,
* "entries"); // xstream.useAttributeFor(Blog.class, "writer"); //
* xstream.aliasField("author", Blog.class, "writer"); //
* xstream.addImplicitCollection(Blog.class, "entries");
* //使用这个属性名作为节点上的元素 xstream.useAttributeFor(Blog.class, "writer");
* //重新命名 xstream.aliasField("author", Blog.class, "writer"); //注册转换器
* xstream.registerConverter(new AuthorConverter());
*/
System.out.println(xstream.toXML(teamBlog));
}
}
1 xStream框架完美实现Java对象和xml文档JSON、XML相互转换
/article/4791848.html
2 xStream完美转换XML、JSON
http://archive.cnblogs.com/a/2025197/
官网:http://xstream.codehaus.org/download.html
相关jar包可在:
XStream之初识
/article/3885740.html下载
示例代码
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
Blog teamBlog = new Blog(new Author("Guilherme Silveira"));
teamBlog.add(new Entry("first","My first blog entry."));
eamBlog.add(new Entry("tutorial","Today we have developed a nice alias tutorial. Tell your friends! NOW!"));
XStream xstream = new XStream();
System.out.println(xstream.toXML(teamBlog));
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
Blog teamBlog = new Blog(new Author("Guilherme Silveira"));
teamBlog.add(new Entry("first","My first blog entry."));
eamBlog.add(new Entry("tutorial","Today we have developed a nice alias tutorial. Tell your friends! NOW!"));
XStream xstream = new XStream();
System.out.println(xstream.toXML(teamBlog));
打印结果为:
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
<xtream.Blog>
<writer>
<name>Guilherme Silveira</name>
</writer>
<entries>
<xtream.Entry>
<title>first</title>
<description>My first blog entry.</description>
</xtream.Entry>
<xtream.Entry>
<title>tutorial</title>
<description>Today we have developed a nice alias tutorial. Tell your friends! NOW!</description>
</xtream.Entry>
</entries>
</xtream.Blog>
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
<xtream.Blog>
<writer>
<name>Guilherme Silveira</name>
</writer>
<entries>
<xtream.Entry>
<title>first</title>
<description>My first blog entry.</description>
</xtream.Entry>
<xtream.Entry>
<title>tutorial</title>
<description>Today we have developed a nice alias tutorial. Tell your friends! NOW!</description>
</xtream.Entry>
</entries>
</xtream.Blog>
以上节点就包含了包名,如包名很长,就很难看了,怎样才能重新命名这个节点呀!
以下的1,2设置效果一样
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
1 //xstream.aliasPackage("", "xtream");
2 xstream.alias("blog", Blog.class);
3 xstream.alias("entry", Entry.class);
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
1 //xstream.aliasPackage("", "xtream");
2 xstream.alias("blog", Blog.class);
3 xstream.alias("entry", Entry.class);
通过这样设置就完成了节点名称的设置.如下:
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
<blog>
<writer>
<name>Guilherme Silveira</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. Tell your friends! NOW!</description>
</entry>
</entries>
</blog>
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
<blog>
<writer>
<name>Guilherme Silveira</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. Tell your friends! NOW!</description>
</entry>
</entries>
</blog>
修改子节点属性名称
将writer属性名称修改为:autor
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
xstream.aliasField("author", Blog.class, "writer");
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
xstream.aliasField("author", Blog.class, "writer");
输出如下:
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
<blog>
<author>
<name>Guilherme Silveira</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. Tell your friends! NOW!</description>
</entry>
</entries>
</blog>
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
<blog>
<author>
<name>Guilherme Silveira</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. Tell your friends! NOW!</description>
</entry>
</entries>
</blog>
删除集合节点名称的设置
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
xstream.addImplicitCollection(Blog.class, "entries");
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
xstream.addImplicitCollection(Blog.class, "entries");
输出如下:
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
<blog>
<author>
<name>Guilherme Silveira</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. Tell your friends! NOW!</description>
</entry>
</blog>
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
<blog>
<author>
<name>Guilherme Silveira</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. Tell your friends! NOW!</description>
</entry>
</blog>
将Blog类的元素设置为:它的节点属性
//使用这个属性名作为节点上的元素
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
xstream.useAttributeFor(Blog.class, "writer");
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
xstream.useAttributeFor(Blog.class, "writer");
//重新命名
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
xstream.aliasField("author", Blog.class, "writer");
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
xstream.aliasField("author", Blog.class, "writer");
//注册转换器
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
xstream.registerConverter(new AuthorConverter());
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
xstream.registerConverter(new AuthorConverter());
转换器:
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
import com.thoughtworks.xstream.converters.SingleValueConverter;
class AuthorConverter implements SingleValueConverter {
//显示节点属性值
public String toString(Object obj) {
return ((Author) obj).getName();
}
public Object fromString(String name) {
return new Author(name);
}
public boolean canConvert(Class type) {
return type.equals(Author.class);
}
}
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
import com.thoughtworks.xstream.converters.SingleValueConverter;
class AuthorConverter implements SingleValueConverter {
//显示节点属性值
public String toString(Object obj) {
return ((Author) obj).getName();
}
public Object fromString(String name) {
return new Author(name);
}
public boolean canConvert(Class type) {
return type.equals(Author.class);
}
}
显示结果:
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
<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>
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
<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>
注解的使用方式,使用之前必须加上注解类才有作用:
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
XStream xstream = new XStream();
xstream.processAnnotations(Blog.class);
xstream.processAnnotations(Entry.class);
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
XStream xstream = new XStream();
xstream.processAnnotations(Blog.class);
xstream.processAnnotations(Entry.class);
1 @XStreamAlias注解可在类与属性上使用设置名称,相当于: xstream.alias("blog", Blog.class);
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
@XStreamAlias("blog")
public class Blog {
@XStreamAlias("author")
private Author writer;
.....
}
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
@XStreamAlias("blog")
public class Blog {
@XStreamAlias("author")
private Author writer;
.....
}
当然Entry类也要设置同样的类属性:@XStreamAlias("entity")
2 @XStreamImplicit去集合节点名:相当于 xstream.addImplicitCollection(Blog.class, "entries");
3 @XStreamConverter(AuthorConverter.class),参见以上的转换器类相当于:
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
xstream.useAttributeFor(Blog.class, "writer");
//重新命名
xstream.aliasField("author", Blog.class, "writer");
//注册转换器
xstream.registerConverter(new AuthorConverter());
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
xstream.useAttributeFor(Blog.class, "writer");
//重新命名
xstream.aliasField("author", Blog.class, "writer");
//注册转换器
xstream.registerConverter(new AuthorConverter());
要使用这个注解AuthorConverter必须符合二个条件
a 必须要有个默认的无参构造函数
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
public AuthorConverter() {
}
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
public AuthorConverter() {
}
b 类声明必须为:public
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
public class AuthorConverter implements SingleValueConverter {
...
}
[java]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
public class AuthorConverter implements SingleValueConverter {
...
}
不用注解这二点都可以不强制要求!
完整代码如下:
Java代码
![](http://liuzidong.iteye.com/images/icon_copy.gif)
![](http://liuzidong.iteye.com/images/icon_star.png)
![](http://liuzidong.iteye.com/images/spinner.gif)
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
@XStreamAlias("blog")
public class Blog {
@XStreamAsAttribute
@XStreamAlias("author")
@XStreamConverter(AuthorConverter.class)
private Author writer;
@XStreamImplicit
private List entries = new ArrayList();
public Blog(Author writer) {
this.writer = writer;
}
public void add(Entry entry) {
entries.add(entry);
}
public List getContent() {
return entries;
}
public static void main(String[] args) {
Blog teamBlog = new Blog(new Author("Guilherme Silveira"));
teamBlog.add(new Entry("first", "My first blog entry."));
teamBlog
.add(new Entry("tutorial",
"Today we have developed a nice alias tutorial. Tell your friends! NOW!"));
XStream xstream = new XStream();
xstream.processAnnotations(Blog.class);
xstream.processAnnotations(Entry.class);
// 重新命名节点名
// xstream.aliasPackage("", "xtream");
/*
* xstream.alias("blog", Blog.class); xstream.alias("entry",
* Entry.class); //重新命名属性名 // xstream.aliasField("author", Blog.class,
* "writer"); //去节点 xstream.addImplicitCollection(Blog.class,
* "entries"); // xstream.useAttributeFor(Blog.class, "writer"); //
* xstream.aliasField("author", Blog.class, "writer"); //
* xstream.addImplicitCollection(Blog.class, "entries");
* //使用这个属性名作为节点上的元素 xstream.useAttributeFor(Blog.class, "writer");
* //重新命名 xstream.aliasField("author", Blog.class, "writer"); //注册转换器
* xstream.registerConverter(new AuthorConverter());
*/
System.out.println(xstream.toXML(teamBlog));
}
}
相关文章推荐
- 使用 jdMind 及改进
- Redis 数据丢失及解决
- 172,使用screenium,GIFBrewery制作gif动态图
- ERROR ITMS-90094: "Invalid Launch Image - Your app contains a launch image with a size modifier that
- 程序员必备的代码审查(Code Review)清单
- RESTful 架构详解
- if else语句
- assert()
- sed 删除行
- 新手维护服务器之administrator在多台电脑上登录
- Linux使用ODBC方式还是DBI方式安装R语言扩展包好
- mysql 语句集锦
- java程序清除指定的varnish缓存
- 如果获取 上传域的文件名
- AFNnetworking详解
- MFC消息映射与命令传递
- hdu Tempter of the Bone (奇偶剪枝)
- JS原型与原型链终极详解(转)
- C#异步下载文件
- 利用USB网卡配置树莓派为无线热点