登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

查看: 244096|回复: 7

android下通过xstream解析xml格式信息

[复制链接]

206

主题

1622

帖子

2721

安币

Android大神

Rank: 6Rank: 6

发表于 2011-11-8 19:57:40 | 显示全部楼层 |阅读模式

可以通过json格式向android http客户端传输数据,见:android下支持json的远程访问,也可以用xml格式。

下面是一个xml文件的格式示例。

  1. <product>
  2.     <name>NetGear 614v9无线路由器</name>
  3.     <createTime>2009-10-27 00:00:00.0 CST</createTime>
  4. </product>
复制代码
下载或者访问该xml文件:[Download not found]如果解析上面的xml文件呢?这里选用了xstream,网址:
  1. http://xstream.codehaus.org/
复制代码
xstream可以自动解析文件,并且根据xml数据实例化javabean。如果不这样,需要手工编写SAX API代码解析。首先编写了一个对应的Product的javabean:
  1. package com.easymorse;

  2. import java.util.Date;

  3. public class Product {
  4.     @Override
  5.     public String toString() {
  6.         return “Product [createTime=" + createTime.toLocaleString() + ", name=" + name + "]“;
  7.     }

  8.     private String name;

  9.     public String getName() {
  10.         return name;
  11.     }

  12.     public void setName(String name) {
  13.         this.name = name;
  14.     }

  15.     public Date getCreateTime() {
  16.         return createTime;
  17.     }

  18.     public void setCreateTime(Date createTime) {
  19.         this.createTime = createTime;
  20.     }

  21.     private Date createTime;
  22. }
复制代码
然后,需要类似这样调用xstream的代码(代码还是改自实现android activity之间的跳转
  1. package com.easymorse;

  2. import java.io.BufferedReader;
  3. import java.io.InputStreamReader;

  4. import org.apache.http.HttpResponse;
  5. import org.apache.http.client.HttpClient;
  6. import org.apache.http.client.methods.HttpGet;
  7. import org.apache.http.impl.client.DefaultHttpClient;

  8. import android.app.Activity;
  9. import android.os.Bundle;
  10. import android.util.Log;
  11. import android.widget.TextView;

  12. import com.thoughtworks.xstream.XStream;

  13. public class NextActivity extends Activity {
  14.     private TextView textView;
  15.     @Override
  16.     protected void onCreate(Bundle savedInstanceState) {
  17.         super.onCreate(savedInstanceState);
  18.         this.setContentView(R.layout.next_activity);
  19.         this.textView=(TextView) this.findViewById(R.id.TextView01);

  20.         HttpClient client = new DefaultHttpClient();
  21.         StringBuilder builder = new StringBuilder();

  22.         HttpGet get = new HttpGet(
  23.                 “http://marshal.easymorse.com/wp-content/uploads/2009/10/product2.xml”);
  24.         try {
  25.             HttpResponse response = client.execute(get);
  26.             BufferedReader reader = new BufferedReader(new InputStreamReader(
  27.                     response.getEntity().getContent()));
  28.             for (String s = reader.readLine(); s != null; s = reader.readLine()) {
  29.                 builder.append(s);
  30.             }
  31.             Log.v(“response”,”product:”+builder.toString());
  32.             XStream xstream = new XStream();
  33.             xstream.alias(“product”, Product.class);
  34.             Product product=(Product) xstream.fromXML(builder.toString());
  35.             this.textView.setText(product.toString());
  36.         } catch (Exception e) {
  37.             e.printStackTrace();
  38.         }
  39.     }
  40. }
复制代码
执行NextActivity的截图:从服务器端返回的中文内容能够正确解码。不过,如果通过eclipse插件中的ddms日志,看到的是乱码,估计和日志或者eclipse插件默认字符集有关 。另外,想要使用xstream需要引入xstream包。具体方法见:在eclipse的android项目中引入第三方包。在这里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时:
  1. XStream xstream = new XStream(new DomDriver());
复制代码
另外,日期格式用:
  1. 2009-10-27 00:00:00.0 CST
复制代码
是为了直接转型方面,如果比较复杂,需要实现xstream的转型接口做定制实现:http://xstream.codehaus.org/converter-tutorial.html


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

2

主题

26

帖子

55

安币

程序猿

Rank: 2

发表于 2012-3-28 13:51:24 | 显示全部楼层
dfgdxbxdbh2342

0

主题

46

帖子

52

安币

初级码农

Rank: 1

发表于 2013-1-9 23:37:45 | 显示全部楼层
学习,,,,,,,,,,,,,,

6

主题

467

帖子

707

安币

代码手工艺人

Rank: 4

QQ达人

发表于 2013-1-17 10:46:49 | 显示全部楼层
学习了谢谢楼主,如果有更详细的讲解更好了

0

主题

41

帖子

28

安币

初级码农

Rank: 1

发表于 2013-2-21 08:46:01 | 显示全部楼层
ytzyg 发表于 2012-3-28 13:51
dfgdxbxdbh2342

学习啦,lz

0

主题

1万

帖子

2411

安币

Android大神

Rank: 6Rank: 6

发表于 2013-4-18 22:23:24 | 显示全部楼层
好东西啊~~~~~~~

0

主题

20

帖子

0

安币

初级码农

Rank: 1

发表于 2013-4-24 15:39:19 | 显示全部楼层
谢谢分享

0

主题

14

帖子

1

安币

初级码农

Rank: 1

发表于 2014-7-13 08:13:43 | 显示全部楼层
学习学习                             
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条

下载安卓巴士客户端

全国最大的安卓开发者社区
联系我们
关闭
合作电话:
15618560077
Email:
805941275@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 广东互联网违法和不良信息举报中心|中国互联网举报中心|下载客户端|申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表