android XML解析器全解案例

1.使用pull解析

 1 package com.example.myxml;
 2
 3 import java.io.InputStream;
 4 import java.util.ArrayList;
 5 import java.util.List;
 6
 7 import org.xmlpull.v1.XmlPullParser;
 8 import org.xmlpull.v1.XmlPullParserFactory;
 9
10 import android.util.Log;
11 import android.util.Xml;
12
13 public class Pullparser {
14
15     public static List<Person> getPerson(InputStream inStream) throws Exception {
16         List<Person> psonList = new ArrayList<Person>();
17         Person person = null;
18         XmlPullParser xmlParse = Xml.newPullParser();
19         try {
20             xmlParse.setInput(inStream, "utf-8");
21             int evnType = xmlParse.getEventType();
22             while (evnType != XmlPullParser.END_DOCUMENT) {
23                 switch (evnType) {
24                 case XmlPullParser.START_TAG:
25                     String tag = xmlParse.getName();
26                     if (tag.equalsIgnoreCase("person")) {
27                         person = new Person();
28                         person.setId(Integer.parseInt(xmlParse.getAttributeValue(0)));
29                     } else if (person != null) {
30                         // parse after tag
31                         if (tag.equalsIgnoreCase("name")) {
32                             person.setName(xmlParse.nextText());
33                         } else if (tag.equalsIgnoreCase("age")) {
34                             person.setAge(xmlParse.nextText());
35                         }
36                     }
37                     break;
38                 case XmlPullParser.END_TAG:
39                     if (xmlParse.getName().equalsIgnoreCase("person")
40                             && person != null) {
41                         psonList.add(person);
42                         person = null;
43                     }
44                     break;
45                 default:
46                     break;
47                 }
48                 evnType = xmlParse.next();
49             }
50         } catch (Exception e) {
51         }
52         return psonList;
53     }
54 }

2.使用DOM解析

package com.example.myxml;

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

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import android.annotation.SuppressLint;

public class DOMparser {

    @SuppressLint("UseValueOf")
    public static List<Person> parse(InputStream inStream) throws Exception {
        List<Person> persons = new ArrayList<Person>();
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse(inStream);
        Element root = document.getDocumentElement();
        NodeList personNodes = root.getElementsByTagName("person");
        for (int i = 0; i < personNodes.getLength(); i++) {
            Element personElement = (Element) personNodes.item(i);
            int id = new Integer(personElement.getAttribute("id"));
            Person person = new Person();
            person.setId(id);
            NodeList childNodes = personElement.getChildNodes();
            for (int y = 0; y < childNodes.getLength(); y++) {
                if (childNodes.item(y).getNodeType() == Node.ELEMENT_NODE) {
                    if ("name".equals(childNodes.item(y).getNodeName())) {
                        String name = childNodes.item(y).getFirstChild().getNodeValue();
                        person.setName(name);
                    }else if ("age".equals(childNodes.item(y).getNodeName())) {
                        String age = childNodes.item(y).getFirstChild().getNodeValue();
                        person.setAge(age);
                    }
                }
            }
            persons.add(person);
        }
        inStream.close();
        return persons;
    }
}

3.使用SAX解析

package com.example.myxml;

import java.util.ArrayList;
import java.util.List;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import android.annotation.SuppressLint;

public class SAXparser extends DefaultHandler {
    private List<Person> persons;
    private Person person;
    private String preTAG;  

    @Override
    public void startDocument() throws SAXException {
        persons = new ArrayList<Person>();
    }  

    @Override
    public void characters(char[] ch, int start, int length)throws SAXException {
        if (person != null) {
            String data = new String(ch, start, length);
            if ("name".equals(preTAG)) {
                person.setName(data);
            } else if ("age".equals(preTAG)) {
                person.setAge(data);
            }
        }
    }  

    @SuppressLint("UseValueOf")
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        if ("person".equals(localName)) {
            person = new Person();
            person.setId(new Integer(attributes.getValue(0)));
        }
        preTAG = localName;
    }  

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        if ("person".equals(localName) && person != null) {
            persons.add(person);
            person = null;
        }
        preTAG = null;
    }  

    public List<Person> getPersons() {
        return persons;
    }
}  

案例辅助代码

xML文件

<?xml version="1.0" encoding="UTF-8"?>
<persons>
    <person id="23">
        <name>张三</name>
        <age>54</age>
    </person>
    <person id="20">
        <name>小明</name>
        <age>266</age>
    </person>
</persons>  

读取本地XML文件流

package com.example.myxml;

import java.io.InputStream;
import java.util.List;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {
    TextView resultView;
    List<Person> personList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        resultView = (TextView) findViewById(R.id.result);
        InputStream inStream = MainActivity.class.getClassLoader().getResourceAsStream("personxml.xml");
        // SAX_Parser(inStream);
        // DOM_Parser(inStream);
        PULL_Parser(inStream);
        visity();
    }

    private void PULL_Parser(InputStream inStream) {
        try {
            personList=    Pullparser.getPerson(inStream);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private void DOM_Parser(InputStream inStream) {
        try {
            personList = DOMparser.parse(inStream);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void SAX_Parser(InputStream inStream) {
        try {
            // 得到SAX解析器的工厂实例
            SAXParserFactory spf = SAXParserFactory.newInstance();
            // 从SAX工厂实例中获得SAX解析器
            SAXParser saxParser = spf.newSAXParser();
            SAXparser handler = new SAXparser();
            saxParser.parse(inStream, handler);
            inStream.close();

            personList = handler.getPersons();
        } catch (Exception e) {
        }
    }
    public void visity(){
        if(personList!=null){
            StringBuilder sb = new StringBuilder();
            for (Person person : personList) {
                sb.append(person.toString()).append("\n");
            }
            resultView.setText(sb.toString());
        }else{
            Toast.makeText(getApplicationContext(), "null", 0).show();
        }

    }
}

android XML解析器全解案例

时间: 2024-11-07 10:46:18

android XML解析器全解案例的相关文章

Android xml 解析

XML 常用的三种解析方式: DOM: 全部加载到内存,生成一个树状结构,占用内存比较大. SAJ: 采用事件驱动,速度快,效率高,不支持回退. PULL:也是采用事件驱动,语法简洁. 步骤: 1. 创建XML 解析器:XmlPullParser parser = Xml.newPullParser(); 2. 配置解析器:parser.setInput(is, "utf-8");// 参数为 xml 文件输入流 和 编码方式. 3. 根据事件进行解析. int type = pars

TinyXML开源XML解析器-TinyXML-2

TinyXML-2 is a simple, small, efficient, C++ XML parser that can be easily integrating into other programs. TinyXML-2 是一个简单.小型.高效的C++ XML解析器,它可以很容易地集成到其他程序. TinyXML-1 served my needs for many years; but it uses memory inefficiently, and doesn't perfo

Android(java)学习笔记106:Android XML解析

在Android平台上可以使用Simple API for XML(SAX) . Document Object Model(DOM)和Android附带的pull解析器解析XML文件. 下面是本例子要解析的XML文件: 文件名称:itcast.xml <?xml version="1.0" encoding="UTF-8"?> <persons> <person id="23"> <name>李明

VC环境使用XML解析器(TinyXML)编程

我是在VC下编译运行. 1.首先下载TinyXML库的文件,这里给出链接http://prdownloads.sourceforge.net/tinyxml/tinyxml_2_3_4.zip?download 2.下载后解压这个压缩包,把所有的东西放到一个找的着的地方(比如,E:\开发库\TinyXML) 3.用Visual C++(推荐VC++.NET2003)创建一个新的工程(Win32控制台) 4.在TinyXML的目录里面找到tinystr.h, tinyxml.h, tinystr.

android xml解析

android xml 解析 在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX.Pull.Dom解析方式. SAX特点: 解析方式是一种基于事件驱动的,消耗的内存少 Pull特点: 解析方式是一种基于事件驱动的,消耗的内存少,在android系统内部的xml解析都是用这种方式 Dom特点: dom是把全部文件读入到内存中,这种方式很消耗内存,对于内存资源本来就很少的android手机,这种 方式不太建议使用. 个人建议:  SAX和pull都比较适合mo

C++的XML解析器:TinyXML

TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译.这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树. 下面是该库的类的继承关系: 在TinyXML中,根据XML的各种元素来定义了一些类: TiXmlBase:整个TinyXML模型的基类. TiXmlAttribute:对应于XML中的元素的属性. TiXmlNode:对应于DOM结构中的节点. TiXmlComment:对应于XML中的注释 T

Android] Android XML解析学习——方式比较

[Android] Android XML解析学习——方式比较 (ZT) 分类: 嵌入式 (From:http://blog.csdn.net/ichliebephone/article/details/5981913) 一.基础知识 经过这段时间的学习,我们已经了解了Android平台上用于解析XML的三种方式:SAX.DOM和Pull.并且在学习的过程中也介绍了这三种方式各自的特点及适合的使用场合,简单的来说,DOM方式最直观和容易理解,但是只适合XML文档较小的时候使用,而SAX方式更适合

TinyXML:一个优秀的C++ XML解析器

1. TinyXML:一个优秀的C++ XML解析器 2. http://blog.chinaunix.net/uid-23381466-id-3360201.html

常见C/C++ XML解析器比较

常见C/C++ XML解析器有tinyxml.XERCES.squashxml.xmlite.pugxml.libxml等等,这些解析器有些是支持多语言的,有些只是单纯C/C++的.如果你是第一次接触到XML解析,那么关于XML解析器的选择问题的确令人头疼,我们先看一下这些解析器有哪些特点. 一.Xerces XML解析器 官方网址:http://xerces.apache.org/xerces-c/ Xerces前身是IBM的XML4C,XML4C也是一种功能强大的XML解析器,之后交给Apa