一直就想试试XStream,刚好要写一个关于XML的解析,就用了用,确实不错哦,比Digester做的好,已经做到了不需要自己写配置文件来描述XML节点中对应的调用方法,这点不错,说明它的marshal和unmarsh做的很好,呵呵..........不愧是thoughworks出的,不废话了。
一个简单的例子,比如有个这样的XML文件:
<
userprofile
>
< users >
< user >
< name > jerry </ name >
< mail > BlueDavy@hotmail.com </ mail >
</ user >
< user >
< name > bluedavy </ name >
< mail > BlueDavy@sina.com </ mail >
</ user >
</ users >
</ userprofile >
< users >
< user >
< name > jerry </ name >
< mail > BlueDavy@hotmail.com </ mail >
</ user >
< user >
< name > bluedavy </ name >
< mail > BlueDavy@sina.com </ mail >
</ user >
</ users >
</ userprofile >
用XStream实现该文件的解析的话很简单,编写一个userprofile类,如下:
public
class
UserProfile{
private List users = new ArrayList();
public void setUsers(List users){
this .users = users;
}
public List getUsers(){
return users;
}
public void addUser(User user){
users.add(user);
}
}
private List users = new ArrayList();
public void setUsers(List users){
this .users = users;
}
public List getUsers(){
return users;
}
public void addUser(User user){
users.add(user);
}
}
再写一个User类:
public
class
User{
private String name;
private String mail;
// ------ Get & Set
}
private String name;
private String mail;
// ------ Get & Set
}
解析这个XML文件的类就这么写:
XStream stream
=
new
XStream();
stream.alias(“userprofile“,UserProfile. class );
stream.alias(”user”,User. class );
UserProfile profile = (UserProfile)stream.fromXML( new FileReader(“profile.xml“));
List users = profile.getUsers();
for ( int i = 0 ;i < users.size();i ++ ){
User user = (User)users.get(i);
}
stream.alias(“userprofile“,UserProfile. class );
stream.alias(”user”,User. class );
UserProfile profile = (UserProfile)stream.fromXML( new FileReader(“profile.xml“));
List users = profile.getUsers();
for ( int i = 0 ;i < users.size();i ++ ){
User user = (User)users.get(i);
}
就是这么的简单,很明显在一定程度上超过了Digester,虽然思想基本是一致的,^_^
更多详细的信息请参见:
http://xstream.codehaus.org