您的位置:首页 > 编程语言 > Java开发

java解析xml之xstream学习

2017-03-05 11:04 302 查看
我接触到xstream是在一次逛开源中国的时候,那时没有引起什么重视。这个星期的作业是写一个mini Struts,要读取xml配置文件,突然想到这个库,于是去了官网

我猜这个网页应该是很久之前写的,毕竟样式在那里。快速的找到Tutorials,进入第一篇。

data class PhoneNumber(
var code:Int,
var number:String
)
data class Person(
var firstname:String,
var lastname:String,
var phone:PhoneNumber,
var fax:PhoneNumber
)

fun main(args: Array<String>) {
val xstream = XStream()
xstream.alias("person",Person::class.java)
xstream.alias("phonenumber",PhoneNumber::class.java)

val joe = Person("Joe","Walnes", PhoneNumber(123,"1234-456"), PhoneNumber(123,"9999-999"))

val xml = xstream.toXML(joe)

println(xml)

val newJoe = xstream.fromXML(xml)
println(newJoe)
}


xstream是把xml文件的内容映射成一个类的

<person>
<firstname>Joe</firstname>
<lastname>Walnes</lastname>
<phone>
<code>123</code>
<number>1234-456</number>
</phone>
<fax>
<code>123</code>
<number>9999-999</number>
</fax>
</person>
Person(firstname=Joe, lastname=Walnes, phone=PhoneNumber(code=123, number=1234-456), fax=PhoneNumber(code=123, number=9999-999))


看上去还是挺方便的。对于习惯了Gson那个解析json的方式后,我觉得xstream的这个方式还是挺烦的。于是,继续看下一个Tutorials。

终于看到了注解的地方。我是比较喜欢用注解的,感觉上与c++的宏有类似之处。

@XStreamAlias("action")
public class Action {
@XStreamAsAttribute
private String name;
@XStreamAlias("class")
@XStreamAsAttribute
private String clazz;
@XStreamImplicit
private List<Result> results;

// 省略getter 和 setter
}


在xstream中,类名会被映射成带包名的样子。如果我不需要带包名,就可以使用
@XStreamAlias(别名)
来映射成其他的名字。xstream默认是把成员变量作为xml的节点的,如果需要作为属性,则可以添加
@XStreamAsAttribute
这个注解。最后一个是,并不是所以的集合都要显式的作为一个集合的子节点。于是,xstream提供了隐式的注解
@XStreamImplicit


但是,习惯了自动扫描的我,没有想到xstream的注解需要一行代码才能开启。

xStream.processAnnotations(new Class[]{需要扫描的类});


总的来说,xstream还是挺好用的,比起Gson解析json的来要差些。可能是xml比较复杂吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: