Android - XmlPullParser的简单应用

Android Developer里的资料:http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html

可参考:

http://www.cnblogs.com/zhangdongzi/archive/2011/04/14/2016595.html

http://articles.csdn.net/badasanxingzhuanqu/jishuwenzhang_Android/2011/0703/300972.html


在Android中,可使用getResource.getXml(R.xml.X)来获得XmlPullParser对象(其实返回的是XmlResourceParser对象),得到xxp之后,xxp的状态为START_TAG。


通过对

①解析器的状态(标签等的状态)

②标签和属性、值的String

来解析XML

———————————— ① ——————————————

解析器状态(EventType)有以下几种:

<foo>HELLO, WORLD</foo>

1.(XmlPullParser.)START_DOCUMENT

2.START_TAG

3.TEXT ( 对应“HELLO, WORLD” )

4.END_TAG ( 个人理解为检测</foo>中的“/”,标签结束的标记 )

5.END_DOCUMENT


getEventType()用来获得当前解析器状态

xxp.next() 解析器解析下面一个内容(The method next() advances the parser to the next event)。

————————————— ② —————————————

示例:

<start des="123">
<map attribute="value" att2="v2"/>
<foo>HELLO, WORLD</foo>
</start>

1.xpp.getName()可以得到“start”"map""foo"这些字符串。

2.xpp.getAttributeCount()得到一个标签范围中的属性个数。如map中有两个属性。

3.xpp.getAttributeName得到属性名,范例中为“attribute”和“att2”。

4.xpp.getAttributeValue得到属性中的值,范例中为“value”和“v2”。

如果要得到"HELLO, WORLD",则需要使用xxp.getText()。

——————————————————————————


// 使用②中的XML
XmlPullParser xpp = getResources().getXml(R.xml.test);

//开始解析
while(xpp.getEventType()!=XmlPullParser.END_DOCUMENT){
  if(xpp.getEventType()==XmlPullParser.START_TAG){
    // 标签为“start”,最外层,为START_TAG时
    if(xpp.getName.equals("start")){
      getItems(xpp);
    }  
  }
  xpp.next();
}
// ————————————————————————————————————————————————————
private void getItems(xxp){
  while(true){
    xpp.next();// 解析下一个内容
    
    // 退出循环的条件
    if((xpp.getEventType()==XmlPullParser.END_TAG&&xpp.getName.equals("start"))
      ||xpp.getEventType()==XmlPullParser.END_DOCUMENT){
      break;
    }

    // 依次解析标签内容
    if(xpp.getEventType()==XmlPullParser.START_TAG){
      // 标签为“map”
      if(xpp.getName().equals("map")){
        for(int i=0;i<xpp.getAttributeCount();i++){
          // 遍历标签中的属性
          if(xpp.getAttributeName(i).equals("attribute")){
            //得到值:value
            items.add(xpp.getAttributeValue(i));
          }
          if("att2"){...}
        } 
      }
      // 标签为“foo”
      if(xpp.getName().equals("foo")) { 
        xpp.next(); 
        if(xpp.getEventType()==XmlPullParser.TEXT){ 
          //得到“HELLO, WORLD” 
          items.add(xpp.getText()); 
        } 
      } 
    }
  }
}







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值