xtream的工具使用

Python025

xtream的工具使用,第1张

Xstream

需要的jar包

xpp3_min-1.1.4c.jar

xstream-1.3.1.jar

作用:

将xml字符串转换为java对象,或者将java对象转换为xml字符串

核心类:XStream xs = new XStream()

准备工作,先创建两个java类:City和Province

@XStreamAlias("city")

public class City {

private String name

public String getName() {

return name

}

public void setName(String name) {

this.name = name

}

}

@XStreamAlias("province")

public class Province {

@XStreamAsAttribute()

private String name

@XStreamImplicit(itemFieldName = "city")

private List citys

public List getCitys() {

return citys

}

public void setCitys(List citys) {

this.citys = citys

}

public String getName() {

return name

}

public void setName(String name) {

this.name = name

}

}

第一:将java类转换为xml字符串

XStream xs = new XStream()

String xml = xs.toXML(JavaBean)

打印的字符串会将类的包名作为xml的标签,以及里面的字段都会变成标签。

例如将City类变为xml字符串:

武汉

将Province变成xml字符串

湖北

武汉

所以为了能将打印的字符串变为我们所想要的格式,可以使用Xstream提供的注解进行格式化输出

提供便捷注解

@XStreamAlias(别名) 对类和变量设置别名

@XStreamAsAttribute  设置变量生成属性

@XStreamOmitField  设置变量 不生成到XML

@XStreamImplicit(itemFieldName = “hobbies”) 设置集合类型变量 别名

使注解生效

xStream.autodetectAnnotations(true)

第二:将xml字符串变为java对象

Object xs.fromXML(InputStream input) //将一个下买了指定的流变为java对象

Object xs.fromXML(String xml)  //将xml字符串变为java对象

Object xs.fromXML(InputStream input,Object root)  ?

Object xs.fromXML(String xml,Object root)  ?

注意:转换的xml文档必须与Java对象  的格式对应

例如:将下面xml字符串转换为Java对象

武汉

则进行转换时候:

XStream xs = new XStream()

Object o = xs.fromXML(in)

若对应的java格式一定是:

包名为:com.domain

类名为:City

里面有一个成员属性:name  提供setter/getter方法

若不是则可以使用别名:

a.为类设置别名

xs.alias("city", City.class)

b.为属性添加别名

xstream.useAttributeFor(Blog.class,"author");

能不能通过注解将 xml转换为制定的java对象  ?

能,手动用方法添加别名

   

此方法传入文件名即可获得对象

-------------------------------------------

import java.beans.XMLDecoder

import java.io.File

import java.io.FileInputStream

import java.io.FileNotFoundException

import java.io.IOException

import java.util.ArrayList

public class ReadXml {

public static Object getXml(String path){

File file=new File(path)

FileInputStream fileInputStream

Object object=null

try {

fileInputStream = new FileInputStream(file)

XMLDecoder decoder=new XMLDecoder(fileInputStream)

object=decoder.readObject()

fileInputStream.close()

decoder.close()

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace()

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

return object

}

}

---------------------------------------------------------------------

如果不可以 用这个写的方式 直接写对象到XML里 此方法需传入对象和写入路径

mport java.beans.XMLEncoder

import java.io.File

import java.io.FileNotFoundException

import java.io.FileOutputStream

import java.io.IOException

public class WriteXml {

public static void setXml(Object o,String fileName){

File file=new File(fileName)

try {

FileOutputStream fileOutputStream=new FileOutputStream(file)

XMLEncoder encoder=new XMLEncoder(fileOutputStream)

encoder.writeObject(o)

encoder.flush()

encoder.close()

fileOutputStream.close()

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace()

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

}

}

public static String do_post(String url, List<NameValuePair> name_value_pair) throws IOException {

        String body = "{}"

        DefaultHttpClient httpclient = new DefaultHttpClient()

        try {

            HttpPost httpost = new HttpPost(url)

            httpost.setEntity(new UrlEncodedFormEntity(name_value_pair, StandardCharsets.UTF_8))

            HttpResponse response = httpclient.execute(httpost)

            HttpEntity entity = response.getEntity()

            body = EntityUtils.toString(entity)

        } finally {

            httpclient.getConnectionManager().shutdown()

        }

        return body

    }

    public static String do_get(String url) throws ClientProtocolException, IOException {

        String body = "{}"

        DefaultHttpClient httpclient = new DefaultHttpClient()

        try {

            HttpGet httpget = new HttpGet(url)

            HttpResponse response = httpclient.execute(httpget)

            HttpEntity entity = response.getEntity()

            body = EntityUtils.toString(entity)

        } finally {

            httpclient.getConnectionManager().shutdown()

        }

        return body

    }