pull方法解析Xml文档

package com.bawei.pullparsexmldemo;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.util.Xml;
import android.view.Menu;

import com.bawei.bean.User;

public class MainActivity extends Activity {
    
    private List<User> userlist;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        pullParseXml();
        
        Log.d("user", userlist.toString());
    }

    private void pullParseXml() {
        
        //1.通过Xml的newPullParser方法获取一个对象XmlPullParser
        XmlPullParser parser = Xml.newPullParser();
        try {
            //2.设置要解析的文件
            parser.setInput(getAssets().open("contacts.xml"), "utf-8");
            
            boolean isNOTEOF = true;//没有到文件结尾
            
            String tagname = "";//记录节点名称
                
                
            //3.开始解析文档--返回值是五种事件类型
            int event = parser.getEventType();
            
            User u = null;
            //6.想办法把解析文档的代码循环起来
            while(isNOTEOF){
                //4.判断解析文档事件源属于哪一种事件类型
                switch (event) {
                    case XmlPullParser.START_DOCUMENT://文档开始
                        //初始化动作
                        userlist = new ArrayList<User>();
                        break;
                    case XmlPullParser.START_TAG://节点开始
                        //获取节点名称
                        tagname = parser.getName();
                        if(tagname.equals("user")){
                            u = new User();
                            u.setId(parser.getAttributeValue(null, "id"));
                            u.setUname(parser.getAttributeValue(null, "uname"));
                        }
                        
                        break;
                    case XmlPullParser.TEXT://文本内容
                        if(tagname.equals("phone")){
                            //取电话-文本内容
                            u.setPhone(parser.getText());
                        }else if(tagname.equals("mobil")){
                            u.setMobil(parser.getText());
                        }else if(tagname.equals("addr")){
                            u.setAddr(parser.getText());
                        }else if(tagname.equals("email")){
                            u.setEmail(parser.getText());
                        }
                        
                        break;
                        
                    case XmlPullParser.END_TAG://节点结束
                        tagname = parser.getName();
                        if(tagname.equals("user")){
                            userlist.add(u);
                        }
                        //在节点结束时,重新初始化节点名称(以防空节点内容覆盖正常节点文本内容)
                        tagname = "";
                        break;
        
                    case XmlPullParser.END_DOCUMENT://文档结束
                        //循环结束的标识,很关键,否则死循环
                        isNOTEOF = false;
                        break;
                }
                //5.接着解析下一行(一定不能忘记,否则程序不会往下执行)
                event = parser.next();
            }
        } catch (XmlPullParserException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}



以下是此xml文件


<root>

<resultcode>200</resultcode>

<reason>success</reason>

<result>

<item><id>242</id><catalog>中国文学</catalog></item><item><id>252</id><catalog>人物传记</catalog></item><item><id>244</id><catalog>儿童文学</catalog></item><item><id>248</id><catalog>历史</catalog></item><item><id>257</id><catalog>哲学</catalog></item><item><id>243</id><catalog>外国文学</catalog></item><item><id>247</id><catalog>小说</catalog></item><item><id>251</id><catalog>心灵鸡汤</catalog></item><item><id>253</id><catalog>心理学</catalog></item><item><id>250</id><catalog>成功励志</catalog></item><item><id>249</id><catalog>教育</catalog></item><item><id>245</id><catalog>散文</catalog></item><item><id>256</id><catalog>理财</catalog></item><item><id>254</id><catalog>管理</catalog></item><item><id>246</id><catalog>经典名著</catalog></item><item><id>255</id><catalog>经济</catalog></item><item><id>258</id><catalog>计算机</catalog></item>

</result>

<error_code>0</error_code>

</root>









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值