1.使用pull解析

 package com.example.myxml;

 import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory; import android.util.Log;
import android.util.Xml; public class Pullparser { public static List<Person> getPerson(InputStream inStream) throws Exception {
List<Person> psonList = new ArrayList<Person>();
Person person = null;
XmlPullParser xmlParse = Xml.newPullParser();
try {
xmlParse.setInput(inStream, "utf-8");
int evnType = xmlParse.getEventType();
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(0)));
} else if (person != null) {
// parse after tag
if (tag.equalsIgnoreCase("name")) {
person.setName(xmlParse.nextText());
} else if (tag.equalsIgnoreCase("age")) {
person.setAge(xmlParse.nextText());
}
}
break;
case XmlPullParser.END_TAG:
if (xmlParse.getName().equalsIgnoreCase("person")
&& person != null) {
psonList.add(person);
person = null;
}
break;
default:
break;
}
evnType = xmlParse.next();
}
} catch (Exception e) {
}
return psonList;
}
}

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解析器全解案例的更多相关文章

  1. Android XML解析器的问题

    最近在项目中遇到了一个解析XML的问题,我们是用android自带的DOM解析器来解析XML的,但发现了一个android的问题,那就是在2.3的SDK上面,无法解析像<, >, 等字符串 ...

  2. Android xml 解析

    XML 经常使用的三种解析方式: DOM: 所有载入到内存,生成一个树状结构,占用内存比較大. SAJ: 採用事件驱动,速度快,效率高,不支持回退. PULL:也是採用事件驱动,语法简洁. 步骤: 1 ...

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

     [Android] Android XML解析学习——方式比较 (ZT)  分类: 嵌入式 (From:http://blog.csdn.net/ichliebephone/article/deta ...

  4. Solr系列五:solr搜索详解(solr搜索流程介绍、查询语法及解析器详解)

    一.solr搜索流程介绍 1. 前面我们已经学习过Lucene搜索的流程,让我们再来回顾一下 流程说明: 首先获取用户输入的查询串,使用查询解析器QueryParser解析查询串生成查询对象Query ...

  5. Duilib源码分析(三)XML解析器—CMarkup

    上一节介绍了控件构造器CDialogBuilder,接下来将分析其XML解析器CMarkup: CMarkup:xml解析器,目前内置支持三种编码格式:UTF8.UNICODE.ASNI,默认为UTF ...

  6. tinyxml一个优秀的C++ XML解析器

    读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好. TinyXML是一个开源的解 ...

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

    //-------------------------------------------------------------------------------------------------- ...

  8. 转:TinyXM--优秀的C++ XML解析器

    读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好. TinyXML是一个开源的解 ...

  9. android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

随机推荐

  1. adaboost算法

    三 Adaboost 算法 AdaBoost 是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器,即弱分类器,然后把这些弱分类器集合起来,构造一个更强的最终分类器.(很多博客里说的三个臭皮匠 ...

  2. Note_Master-Detail Application(iOS template)_06_ YJYDetailViewController.h

    //  YJYDetailViewController.h #import <UIKit/UIKit.h> @interface YJYDetailViewController : UIV ...

  3. 谈谈 Mifare Classic 破解

    2008 年的时候,荷兰恩智浦(NXP)公司开发的 RFID 产品 Mifare Classic 就被破解了,黑历史在这里就不在具体说了,想详细了解可以自己 Google 百度.现在还是重点说说关于 ...

  4. Best Practice: Avoiding or minimizing synchronization in servlets

    Introduction Minimize the use of synchronization in servlets. Because servlets are multi-threaded, s ...

  5. 数据结构《9》----Threaded Binary Tree 线索二叉树

    对于任意一棵节点数为 n 的二叉树,NULL 指针的数目为  n+1 , 线索树就是利用这些 "浪费" 了的指针的数据结构. Definition: "A binary ...

  6. HTML的盒子模型

    每个HTML元素都可以看作一个装了东西的盒子,盒子具有宽度(width)和高度(height),盒子里面的内容到盒子的边框之间的距离即填充(padding),盒子本身有边框(border),而盒子边框 ...

  7. HTTP Live Streaming直播(iOS直播)技术分析与实现

    前些日子,也是项目需要,花了一些时间研究了HTTP Live Streaming(HLS)技术,并实现了一个HLS编码器HLSLiveEncoder,当然,C++写的.其功能是采集摄像头与麦克风,实时 ...

  8. HDU5546 Ancient Go DFS

    点击打开链接 题意:给定一个9*9的棋盘,问黑子能否在下一步将白子围住(四面). 由于数据不大,可以直接将'.'换成'x',用DFS搜索. #include<cstdio> #includ ...

  9. # 20145210 《Java程序设计》第04周学习总结

    教材学习内容总结 第六章 继承 •继承:继承基本上就是避免多个类间重复定义共同行为. 我理解的就是:在编写程序的过程中可能会出现部分代码重复的现象,把重复的部分单独定义为一类(父类),在其他代码中(子 ...

  10. Unity3D ShaderLab 使用渐变纹理着色

    Unity3D ShaderLab 使用渐变纹理着色 在我们编写着色器的过程中,还可以通过渐变纹理来控制漫反射的光照颜色.这种做法同样在VALVE的军团要塞2中及其流行. 前期,请准备一个渐变色的图片 ...