下面是一个xml文件的格式示例。
1
2 NetGear 614v9无线路由器
3 2009-10-27 00:00:00.0 CST
4
下载或者访问该xml文件:[Download not found]
如果解析上面的xml文件呢?这里选用了xstream,网址:
http://xstream.codehaus.org/
xstream可以自动解析文件,并且根据xml数据实例化javabean。如果不这样,需要手工编写SAX API代码解析。
首先编写了一个对应的Product的javabean:
01package com.easymorse;
02
03import java.util.Date;
04
05public class Product {
06 @Override
07 public String toString() {
08 return Product [createTime=" + createTime.toLocaleString() + ", name=" + name + "] ;
09 }
10
11 private String name;
12
13 public String getName() {
14 return name;
15 }
16
17 public void setName(String name) {
18 this.name = name;
19 }
20
21 public Date getCreateTime() {
22 return createTime;
23 }
24
25 public void setCreateTime(Date createTime) {
26 this.createTime = createTime;
27 }
28
29 private Date createTime;
30}
然后,需要类似这样调用xstream的代码:
01package com.easymorse;
02
03import java.io.BufferedReader;
04import java.io.InputStreamReader;
05
06import org.apache.http.HttpResponse;
07import org.apache.http.client.HttpClient;
08import org.apache.http.client.methods.HttpGet;
09import org.apache.http.impl.client.DefaultHttpClient;
10
11import android.app.Activity;
12import android.os.Bundle;
13import android.util.Log;
14import android.widget.TextView;
15
16import com.thoughtworks.xstream.XStream;
17
18public class NextActivity extends Activity {
19 private TextView textView;
20 @Override
21 protected void onCreate(Bundle savedInstanceState) {
22 super.onCreate(savedInstanceState);
23 this.setContentView(R.layout.next_activity);
24 this.textView=(TextView) this.findViewById(R.id.TextView01);
25
26 HttpClient client = new DefaultHttpClient();
27 StringBuilder builder = new StringBuilder();
28
29 HttpGet get = new HttpGet(
30http://marshal.easymorse.com/wp-content/uploads/2009/10/product2.xml );
31 try {
32 HttpResponse response = client.execute(get);
33 BufferedReader reader = new BufferedReader(newInputStreamReader(
34 response.getEntity().getContent()));
35 for(String s = reader.readLine(); s != null; s = reader.readLine()) {
36 builder.append(s);
37 }
38 Log.v( response , product: +builder.toString());
39 XStream xstream = new XStream();
40 xstream.alias( product , Product.class);
41 Product product=(Product) xstream.fromXML(builder.toString());
42 this.textView.setText(product.toString());
43 } catch (Exception e) {
44 e.printStackTrace();
45 }
46 }
47}
执行NextActivity的截图:
从服务器端返回的中文内容能够正确解码。不过,如果通过eclipse插件中的ddms日志,看到的是乱码,估计和日志或者eclipse插件默认字符集有关 。
另外,想要使用xstream需要引入xstream包。在这里xstream又依赖xpp3用于对xml解析。xpp3的网址:
http://www.extreme.indiana.edu/xgws/xsoap/xpp/
可以在这里下载到最新的xpp3分发包:
http://www.extreme.indiana.edu/dist/java-repository/xpp3/distributions/
然后解压缩,将其中的xpp3_min-*.jar导入项目即可。
或者也可以选择不依赖xpp3包,这样可以节省24K左右的空间。需要实例化XStream时:
1XStream xstream = new XStream(new DomDriver());
另外,日期格式用:
2009-10-27 00:00:00.0 CST
是为了直接转型方面,如果比较复杂,需要实现xstream的转型接口做定制实现:
http://xstream.codehaus.org/converter-tutorial.html