Android解析XML文件

在Android项目中,我们经常使用xml序列化以及xml的解析

今天我们通过一个手机号码测试案例来学习一下使用PULL解析器解析XML文件。

首先我们将text.XML文件到assets目录下,文件内容如下:

<?xml version='1.0' encoding='gbk' standalone='yes' ?>
    <a>
        <name>13512345678</name>
        <b>重庆移动神州行卡</b>
        <c>有得有失,华而不实,须防劫财,始保平安 吉带凶</c>
    </a>            

解析之前,在layout目录下新建一个布局文件pulltest.xml,以方便后面显示文本,其内容如下:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical"
 6     tools:context="cn.ck.xml.MainActivity" >
 7 
 8     <TextView
 9         android:id="@id/tv"
10         android:layout_width="wrap_content"
11         android:layout_height="wrap_content" />
12 
13 </LinearLayout>

在src目录下的Activity内容如下:

 1 package cn.ck.xml;
 2 
 3 import java.io.InputStream;
 4 import org.xmlpull.v1.XmlPullParser;
 5 import android.app.Activity;
 6 import android.os.Bundle;
 7 import android.util.Xml;
 8 import android.widget.TextView;
 9 import android.widget.Toast;
10 
11 public class MainActivity extends Activity {
12     private TextView tv;
13 
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17         setContentView(R.layout.activity_main);
18         //找到
19         tv = (TextView) findViewById(R.id.tv);
20         try {
21             //通过assertmanager的open方法获取到beauties.xml文件的输入流
22             InputStream is = this.getAssets().open("text.xml");
23             // 获得解析器
24             XmlPullParser parser = Xml.newPullParser();
25             // 设置解析器的字体编码
26             parser.setInput(is, "gbk"); 
27             //用xmlpillparser中的方法获取事件类型
28             int type = parser.getEventType();
29             //创建stringbuilder
30             StringBuilder sb = new StringBuilder();
31             //用循环判断事件类型,从而获取xml中想得到的数据
32             while (type != XmlPullParser.END_DOCUMENT) {
33                 if (type == XmlPullParser.START_TAG) {
34                     if ("name".equals(parser.getName())) {
35                         String namestr = parser.nextText();
36                         sb.append("手机号:" + namestr);
37                     } else if ("b".equals(parser.getName())) {
38                         String bstr = parser.nextText();
39                         sb.append("归属地:" + bstr);
40                     } else if ("c".equals(parser.getName())) {
41                         String cstr = parser.nextText();
42                         sb.append("手机号运势:" + cstr);
43                     }
44                 }
45                 //指向下一个事件
46                 type = parser.next();
47             }
48             //关流
49             is.close();
50             //将获得的数据显示到页面
51             tv.setText(sb.toString());
52         } catch (Exception e) {
53             e.printStackTrace();
54         Toast.makeText(this, "解析失败", 0).show();
55         }
56     }
57 
58 }

右键运行一下android  project.截图如下:

 

另外:从网上下载xstream-1.47 jar 包,利用好api,解析就没那么复杂了.

 

posted on 2017-04-25 21:44  导演丶  阅读(166)  评论(0)    收藏  举报

导航