需要的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
}