文档章节

pull 方式解析xml文件

carlos
 carlos
发布于 2014/10/05 17:05
字数 331
阅读 243
收藏 7
  1. XmlPullParser解析xml的android文档docs/reference/org/xmlpull/v1/XmlPullParser.html

  2. xmlPullParer官网:http://www.xmlpull.org/

    例子:要解析的文件:pull.xml   

     

     

     

     

  3. <?xml version="1.0" encoding="UTF-8"?>
    <Customer>
     <PersonName>
      <SurName>张三</SurName>
     </PersonName>
     <PersonName>
      <SurName>李四</SurName>
     </PersonName>
     
     <ContactName contactType="CSM">
     <PersonName>
      <SurName>王五</SurName>
     </PersonName>
     <Telephone PhoneTechType="Mobile" PhoneNumber="1310000000"/>
     <Email />
     </ContactName>
    </Customer>

    解析此文件的java文件:

     

  4. package com.xmlpullparser;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;
    import android.os.Bundle;
    import android.app.Activity;
    import android.util.Log;
    import android.util.Xml;
    import android.widget.TextView;
    import org.xmlpull.v1.XmlPullParser;
    public class MainActivity extends Activity {
     private static final String TAG = "xmlpullparserTest";
     TextView mTextResult = null;
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      mTextResult = (TextView)findViewById(R.id.textView1);
      List<Customer> customers = readXMLPull();
      StringBuffer strBuffer = new StringBuffer();
      for(Customer cus:customers)
      {
       strBuffer.append(cus.mSurName+", "+cus.mContactType+","+cus.mPhoneTechType+","
         +cus.mPhoneNumber+"\n");
       
      }
      mTextResult.setText(strBuffer);
     }
     public List<Customer> readXMLPull()
     {
      List<Customer> customers = null;
      Customer customer = null;
      InputStream is = null;
      StringBuffer buffer = null;
      int personCount = 0;
      try {
       is = getResources().openRawResource(R.raw.pull);
       XmlPullParser xmlParser = Xml.newPullParser();
       xmlParser.setInput(is,"utf-8");
       int evtType = xmlParser.getEventType();
       while(evtType!=XmlPullParser.END_DOCUMENT)
       {
        switch(evtType)
        {
         case XmlPullParser.START_DOCUMENT:
          buffer = new StringBuffer();
          break;
         case XmlPullParser.END_DOCUMENT:
          break;
         case XmlPullParser.START_TAG:
          buffer.delete(0, buffer.length());
          String tag = xmlParser.getName();
          Log.d(TAG, "tag="+tag);
          if(tag.equalsIgnoreCase("Customer"))
          {
           customers = new ArrayList<Customer>();       
          }
          else if(tag.equalsIgnoreCase("PersonName")&&personCount<2)
          {
           customer = new Customer();
           personCount++;
          }
          else if(tag.equalsIgnoreCase("ContactName"))
          {
           customer = new Customer();
           customer.mContactType = xmlParser.getAttributeValue(null, "contactType");
          }
          else if(tag.equalsIgnoreCase("Telephone")&&customer!=null)
          {
           customer.mPhoneTechType = xmlParser.getAttributeValue(null, "PhoneTechType");
           customer.mPhoneNumber = xmlParser.getAttributeValue(null, "PhoneNumber");
          }
          break;
         case XmlPullParser.END_TAG:
          if(xmlParser.getName().equalsIgnoreCase("PersonName")&&customer!=null)
          {
           customers.add(customer);
           if(personCount<2)
           {
            customer = null;
           }
          }
          else if(xmlParser.getName().equalsIgnoreCase("SurName"))
          {
           customer.mSurName = buffer.toString().trim();
          }
          break;
         case XmlPullParser.TEXT:
          Log.d(TAG, "text ="+xmlParser.getText());
          buffer.append(xmlParser.getText());
          break;
         default:
          break;
        
        }
        evtType = xmlParser.next();
       }
       
      } catch (Exception e) {
       // TODO: handle exception
       e.printStackTrace();
      }
      return customers;
     }
     
    }

    customer.java

  5. package com.xmlpullparser;
    public class Customer
    {
     public String mSurName;
     public String mContactType;
     public String mPhoneTechType;
     public String mPhoneNumber;
    }
  6. 效果图:

先记下来。欢迎提出意见。

© 著作权归作者所有

共有 人打赏支持
carlos
粉丝 24
博文 85
码字总数 21928
作品 0
黄浦
程序员
私信 提问
XML解析之——Pull解析和Xml转Json

Xml的使用在Android开发中也时不时地遇到,通常xml用来写配置文件。Xml解析也是Android开发人员必备的一项技术点。常见的XML解析为DOM解析,SAX解析和PULL解析。 DOM解析: 一次性将全部内容...

翻滚吧李博
2017/12/28
0
0
Android 创建与解析XML(六)—— 比较与使用

前面介绍了四种创建、解析XML的方式: 0、 Android 创建与解析XML(一)—— 概述 1、 Android 创建与解析XML(二)—— Dom方式 2、 Android 创建与解析XML(三)—— Sax方式 3、 Android ...

长平狐
2013/01/06
1K
0
Android的三种解析方式

第一种方式:DOM解析器: DOM是基于树形结构的的节点或信息片段的集合,允许开发人员使用DOM API遍历XML树、检索所需数据。分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和...

津乐
01/11
0
0
XML解析方法详解

今日目标:DOM、 SAX、 STAX、 XML解析API 今日重点:JAXP DOM解析 、JAXP SAX解析、XML PULL解析。 XML现在已成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML。深入了...

honzhang
2017/12/26
0
0
[Android] android平台下sax,dom,pull解析方式性能比较

1.Android中三种XML的解析方式,分别为Dom,Sax,Pull,其中Pull的解析方式最优 2.Dom,Sax,Pull解析方式的区别 (1).Dom解析方式: 首先一下子加载整个文档然后再挨个节点解析,费流量 优点:对于处理...

枫兮兮
2014/02/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Qt那些事0.0.9

关于QThread,无F*k说的。文档说的差不多,更多的是看到很多人提到Qt开发者之一的“你TM的做错了(You're doing it wrong...)”,这位大哥2010年写的博客,下面评论很多,但主要还是集中在2...

Ev4n
9分钟前
0
0
constructor / destructor

_attribute__表示属性,是Clang提供的一种源码注释,方便开发者向编译器表达诉求,一般以__attribute__(*)的方式出现在代码中。为了方便使用,一些常用属性被定义成了宏,经常出现在系统头文...

HeroHY
10分钟前
0
0
大数据教程(7.6)shell脚本定时采集日志数据到hdfs

上一篇博客博主分享了hadoop内置rpc的使用案例,本节博主将为小伙伴们分享一个在实际生产中使用的日志搜集案例。前面的文章我们有讲到过用户点击流日志分析的流程,本节就是要完成这个分析流...

em_aaron
38分钟前
1
0
wave和pcm互转

wav->pcm pcm->wav c#代码: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.IO;using Sys......

whoisliang
40分钟前
1
0
Win10:默认的图片打开应用,打开图片时速度明显很慢的解决办法

首先,我们随便地打开一张图片。然后,点击右上角的三个小点,最后点击弹出菜单最下面的“设置”。如下图: 在“设置”中找到下面的“人物”,把它关掉就好了。 原来,默认情况下,Win 10的图...

LivingInFHL
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部