首页 > 技术文章 > XStream的使用方法、简单使用方法、xml的解析方法

johnsonwei 2016-08-17 00:46 原文

下面介绍的是在Android Studio中的使用

Android Studio中目前支持的Xstream最高版本是xstream-1.4.7.jar,大家可以在网上下载,我的是在开源中国项目中有这个jar包,我是直接将jar包放到libs中使用的,因为我尝试在build.gradle中通过complie的方法添加依赖,但是编译的时候还是不通过。

我使用的是okhttp的client。

下面介绍的是项目开发中从网络获取xml文件并解析成javaBean的方法。

1.网络服务器中的xml文件

<person name="johnson">
<firstname>Joe</firstname>
<lastname>Walnes</lastname> <phone> <phoneno>0107654321</phoneno> </phone> <phone> <phoneno>13800008888</phoneno> </phone> </person>

 

2.     javaBean

/**
 * Created by weizh_000 on 2016/8/16.
 */

//设置Person类在xml中的别名
@XStreamAlias("person")
public class Person {
    //将name设置为XML person字段的 attribute
    @XStreamAsAttribute()
    private String firstname;
    private String lastname;
    //该变量不是xml中的一个字段,应去掉
    @XStreamImplicit()
    private List<Phone> phone = new ArrayList<Phone>();
    @Override
    public String toString() {
        return "Person{" +
                "firstname='" + firstname + '\'' +
                ", lastname='" + lastname + '\'' +
                '}';
    }

    public List<Phone> getPhoneno() {
        return phone;
    }

    public void setPhoneno(List<Phone> phone) {
        this.phone = phone;
    }

    class Phone{
        String phoneno;

        @Override
        public String toString() {
            return "Phone{" +
                    "phoneno=" + phoneno +
                    '}';
        }
    }
}

 

3.使用

public void test() {
        OkHttpClient okHttpClient = new OkHttpClient();//定义client
        Request request = new Request.Builder().url("http://192.168.1.100:8080/test/test.xml").build();//定义request
        okhttp3.Call call = okHttpClient.newCall(request);//用client使用call
        call.enqueue(new okhttp3.Callback() {//异步请求网络数据
            @Override
            public void onFailure(okhttp3.Call call, IOException e) {//请求失败的情况
                System.out.println("fail:");
                e.printStackTrace();
            }

            @Override
            public void onResponse(okhttp3.Call call, okhttp3.Response response) throws IOException {//请求成功的情况
                XStream xStream = new XStream(new DomDriver("UTF-8"));
          //对指定的类使用Annotations 进行序列化,这步非常关键
                xStream.processAnnotations(Person.class);
                if (response.isSuccessful()) {
                    String string = response.body().string();
                    Person person = (Person) xStream.fromXML(string);
                    System.out.println(person.toString()); 
                    System.out.println(person.getPhoneno().toString()); 
               }
           }
      });
}

其实也就这步关键而已,其他的不重要:

  //对指定的类使用Annotations 进行序列化
   xstream.processAnnotations(Person.class);

 

运行结果:

Person{firstname='Joe', lastname='Walnes'}
[Phone{phoneno=0107654321}, Phone{phoneno=13800008888}]

 

推荐阅读