旗下导航:搜·么
当前位置:网站首页 > XML教程 > 正文

JAVAbean与XML互转的利器-XStream的代码详解【XML教程】,JAVAbean,XML,XStream

作者:搜教程发布时间:2019-11-27分类:XML教程浏览:29评论:0


导读:XStream是赫赫有名的thoughtworks下的一个开源项目,主要功能是供应Javabean和XML文本之间的转换,别的还供应JAVAbean和JSON之间的转换,...
XStream是赫赫有名的thought works下的一个开源项目, 主要功能是供应Java bean 和XML文本之间的转换,别的还供应JAVA bean和JSON之间的转换,这个不在本次议论的范围内。
在JAVA1.5今后XSteam也支撑了annotation。 这时候就只要在JAVA BEAN中增加多少annotation就能够了,固然假如不允许修正JAVA bean, 那XStream也供应register的体式格局,也是很简单的。经由过程几个方面细致申明一下:
1.基础转换;
2.运用别号;
3.处置惩罚属性;
4.处置惩罚list范例属性;
5.属性不介入转换;

1. 基础转换
这是一个一般的JAVA bean:

package xstreamTest;  
public class Person {  
    private String name;  
    private int age;  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getName() {  
        return this.name;  
    }  
}

转换代码是如许的:

XStream xstream = new XStream();  
Person person = new Person();  
person.setName("pli");  
person.setAge(18);  
System.out.println(xstream.toXML(person));

我们获得了如许的结果:

<xstreamTest.Person>  
  <name>pli</name>  
  <age>18</age>  
</xstreamTest.Person>

然则 有时候根标签不想运用包途径,怎样搞呢,运用别号

2. 起别号
仆人我们愿望将“xstreamTest.Person” 这个稀里糊涂的element标签改成“person”我们应当这么做。

package xstreamTest;  
@XStreamAlias("person")  
public class Person {  
    private String name;  
    private int age;  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getName() {  
        return this.name;  
    }  
}

而实行代码会变成如许:

XStream xstream = new XStream();  
xstream.autodetectAnnotations(true);  
Person person = new Person();  
person.setName("pli");  
person.setAge(18);  
System.out.println(xstream.toXML(person));

如许我们就获得了想要的:

<person>  
  <name>pli</name>  
  <age>18</age>  
</person>

3. 处置惩罚属性
假如想要将JAVA bean中的“age”属性作为XML中person标签的一个attribute该怎么办呢。
这里引见别的一个annotation:@XStreamAsAttribute, 我们的JAVA bean变成了如许:

@XStreamAlias("person")  
public class Person {  
    private String name;  
    @XStreamAsAttribute  
    private int age;  
      
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getName() {  
        return this.name;  
    }  
}

结果是如许的:

<person age="18">  
  <name>pli</name>  
</person>

4. 处置惩罚List
假如JAVA bean中有List是什么情况呢。

@XStreamAlias("person")  
public class Person {  
    private String name;  
    @XStreamAsAttribute  
    private int age;  
      
    List<String> girlFriends;  
      
    public List<String> getGirlFriends() {  
        return girlFriends;  
    }  
  
    public void setGirlFriends(List<String> girlFriends) {  
        this.girlFriends = girlFriends;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getName() {  
        return this.name;  
    }  
}

直接转换我们会获得如许的结果:

<person age="18">  
  <name>pli</name>  
  <girlFriends>  
    <string>YuanYuanGao</string>  
    <string>QiShu</string>  
    <string>BoZhiZhang</string>  
  </girlFriends>  
</person>

XStream在这里供应了一个@XStreamImplicit(itemFieldName=***)的annotation来满足用户想将List的根节点去掉和转变列表名字的需求,对应到我们的例子上就是去掉<girlFriends>标签和转变"<string>".我们来看看结果。

@XStreamAlias("person")  
public class Person {  
    private String name;  
    @XStreamAsAttribute  
    private int age;  
    @XStreamImplicit(itemFieldName="girl")  
    List<String> girlFriends;  
      
    public List<String> getGirlFriends() {  
        return girlFriends;  
    }  
  
    public void setGirlFriends(List<String> girlFriends) {  
        this.girlFriends = girlFriends;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getName() {  
        return this.name;  
    }  
}

结果是如许:

<person age="18">  
  <name>pli</name>  
  <girl>YuanYuanGao</girl>  
  <girl>QiShu</girl>  
  <girl>BoZhiZhang</girl>  
</person>

5. 疏忽属性
假如在JAVA bean中有些属性不想被序列化,XStream供应了处理这个需求的annotation: @XStreamOmitField
比如说不想讲girlfriends这个List序列化

@XStreamAlias("person")  
public class Person {  
    private String name;  
    @XStreamAsAttribute  
    private int age;  
    @XStreamImplicit(itemFieldName="girl")  
    @XStreamOmitField  
    List<String> girlFriends;  
      
    public List<String> getGirlFriends() {  
        return girlFriends;  
    }  
  
    public void setGirlFriends(List<String> girlFriends) {  
        this.girlFriends = girlFriends;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getName() {  
        return this.name;  
    }  
}

以上就是JAVAbean与XML互转的利器-XStream的代码详解的细致内容,更多请关注ki4网别的相干文章!

标签:JAVAbeanXMLXStream


欢迎 发表评论: