zoukankan      html  css  js  c++  java
  • xml解析

     
    在Android中常用的XML解析器有三种,分别为DOM解析器、SAX解析器和PULL解析器,下面是PULL解析器的方式。为什么要学习PULL解析器呢?因为PULL解析是在XML文档中寻找想要的标记,把需要的内容拉入内存,而不是把整个文档都拉入内存,这种方式比较适合手机等内存有限的小型的移动设备。
        Android并未提供对Java StAX API的支持。但是,Android附带了一个pull解析器,其工作方式类似于StAX。它允许用户的应用程序代码从解析器中获取事件,这与SAX解析器自动将事件推入处理程序相反。

    PULL解析器的运行方式和SAX类似,都是基于事件的模式。不同的是,在PULL解析过程中返回的是数字,且我们需要自己获取产生的事件然后做相应的操作,而不像SAX那样由处理器触发一种事件的方法,执行我们的代码。

            读取到xml的声明返回 START_DOCUMENT;

    读取到xml的结束返回 END_DOCUMENT ;

    读取到xml的开始标签返回 START_TAG

    读取到xml的结束标签返回 END_TAG

    读取到xml的文本返回 TEXT

    PULL解析器小巧轻便,解析速度快,简单易用,非常适合在Android移动设备中使用,Android系统内部在解析各种XML时也是用PULL解析器,Android官方推荐开发者们使用Pull解析技术。Pull解析技术是第三方开发的开源技术,它同样可以应用于JavaSE开发。

          PULL 的工作原理:XML pull提供了开始元素和结束元素。当某个元素开始时,我们可以调用parser.nextText从XML文档中提取所有字符数据。当解释到一个文档结束时,自动生成EndDocument事件。

          常用的XML pull的接口和类:

    XmlPullParser:XML pull解析器是一个在XMLPULL VlAP1中提供了定义解析功能的接口。

    XmlSerializer:它是一个接口,定义了XML信息集的序列。

    XmlPullParserFactory:这个类用于在XMPULL V1 API中创建XML Pull解析器。

    XmlPullParserException:抛出单一的XML pull解析器相关的错误。

    我们尝试解析以下XML:
    <?xml version="1.0" encoding="UTF-8"?>
    <persons>
    <person id="1">
    <name>john</name>
    <age>23</age>
    </person>
    <person id="2">
    <name>david</name>
    <age>233</age>
    </person>
    </persons>
     
     
    下面就是解析XML文档的方法:
     
    package com.davidw.xmlandr;
     
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;
     
    import org.xmlpull.v1.XmlPullParser;
     
    import android.content.Context;
    import android.util.Log;
    import android.util.Xml;
     
    public class XMLPaser {
    static final String TAG = "XMLPaser";
    private static final String ns = null;
    private Context context;
     
    public XMLPaser(Context context) {
    this.context = context;
    }
     
    public List<Person>  parse(String xmlPath){
    List<Person> psonList = new ArrayList<Person>();
    Person person = null;
    InputStream stream = null;
    //get xml parser
    XmlPullParser xmlParse = Xml.newPullParser();
    try{
    //get file stream and set encoding
    stream = this.context.getResources().getAssets().open(xmlPath);
    xmlParse.setInput(stream, "utf-8");
    //get event type
    int evnType = xmlParse.getEventType();
    //continue  to end document
    while(evnType != XmlPullParser.END_DOCUMENT){
    switch(evnType){
    case XmlPullParser.START_TAG:
    String tag = xmlParse.getName();
    if(tag.equalsIgnoreCase("person")){
    person = new Person();
    person.setId(Integer.parseInt(xmlParse.getAttributeValue(ns, "id")));
    }else if(person != null){
    //parse after tag
    if(tag.equalsIgnoreCase("name")){
    person.setName(xmlParse.nextText());
    }else if(tag.equalsIgnoreCase("age")){
    person.setAge(Integer.parseInt(xmlParse.nextText()));
    }
    }
    break;
    case XmlPullParser.END_TAG:
    if(xmlParse.getName().equalsIgnoreCase("person") && person != null){
    psonList.add(person);
    person = null;
    }
    break;
    default:break;
    }
  • 相关阅读:
    简单的模板解析函数
    HTML通过事件传递参数到js 二 event
    HTML通过事件传递参数到js一
    通过this获取当前点击选项相关数据
    LeetCode 20. 有效的括号(Valid Parentheses)
    LeetCode 459. 重复的子字符串(Repeated Substring Pattern)
    LeetCode 14. 最长公共前缀(Longest Common Prefix)
    LeetCode 168. Excel表列名称(Excel Sheet Column Title)
    LeetCode 171. Excel表列序号(Excel Sheet Column Number) 22
    LeetCode 665. 非递减数列(Non-decreasing Array)
  • 原文地址:https://www.cnblogs.com/changzheng/p/3993890.html
Copyright © 2011-2022 走看看