`

【android开发】解析xml文件①

阅读更多

在android中,解析xml有三种方法,SAX ,DOM,还有android自身提供的PULL解析器。

SAX方法介绍

      SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备。 SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML语法中的某部分,如果符合就会触发事件。所谓事件,其实就是一些回调(callback)方法,这些方法(事件)定义在ContentHandler接口。下面是一些ContentHandler接口常用的方法:
startDocument()
当遇到文档的开头的时候,调用这个方法,可以在其中做一些预处理的工作。
endDocument()
和上面的方法相对应,当文档结束的时候,调用这个方法,可以在其中做一些善后的工作。
startElement(String namespaceURI, String localName, String qName, Attributes atts)
当读到一个开始标签的时候,会触发这个方法。namespaceURI就是命名空间,localName是不带命名空间前缀的标签名,qName是带命名空间前缀的标签名。通过atts可以得到所有的属性名和相应的值。要注意的是SAX中一个重要的特点就是它的流式处理,当遇到一个标签的时候,它并不会纪录下以前所碰到的标签,也就是说,在startElement()方法中,所有你所知道的信息,就是标签的名字和属性,至于标签的嵌套结构,上层标签的名字,是否有子元属等等其它与结构相关的信息,都是不得而知的,都需要你的程序来完成。这使得SAX在编程处理上没有DOM来得那么方便。
endElement(String uri, String localName, String name)
这个方法和上面的方法相对应,在遇到结束标签的时候,调用这个方法。
characters(char[] ch, int start, int length)
这个方法用来处理在XML文件中读到的内容,第一个参数用于存放文件的内容,后面两个参数是读到的字符串在这个数组中的起始位置和长度,使用new String(ch,start,length)就可以获取内容。

例子:

1.person.xml

<?xml version="1.0" encoding="UTF-8"?>
<persons>
	<person id="23">
		<name>李明</name>
		<age>30</age>
	</person>
	<person id="20">
		<name>李向梅</name>
		<age>25</age>
	</person>
</persons>

 2.定义javabean保存这些属性

public class Person {
	private Integer id;
	private String name;
	private Short age;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Short getAge() {
		return age;
	}
	public void setAge(Short age) {
		this.age = age;
	}	
}
 3.
public class PersonContentHandler extends DefaultHandler {
	private List<Person> persons = null;
	private Person currentPerson;
	private String tagName = null;//当前解析的元素标签

	public List<Person> getPersons() {
		return persons;
	}
	/*
	 * 接收文档的开始的通知。
	 */
	@Override public void startDocument() throws SAXException {
		persons = new ArrayList<Person>();
	}
	/*
	 * 接收字符数据的通知。
	 */
	@Override public void characters(char[] ch, int start, int length) throws SAXException {
		if(tagName!=null){
			String data = new String(ch, start, length);
			if(tagName.equals("name")){
				this.currentPerson.setName(data);
			}else if(tagName.equals("age")){
				this.currentPerson.setAge(Short.parseShort(data));
			}
		}
	}
	/*
	 * 接收元素开始的通知。
	 * 参数意义如下:
	 *    namespaceURI:元素的命名空间
	 *    localName :元素的本地名称(不带前缀)
	 *    qName :元素的限定名(带前缀)
	 *    atts :元素的属性集合
	 */
	@Override public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
		if(localName.equals("person")){
			currentPerson = new Person();
			currentPerson.setId(Integer.parseInt(atts.getValue("id")));
		}
		this.tagName = localName;
	}
	/*
	 * 接收文档的结尾的通知。
	 * 参数意义如下:
	 *    uri :元素的命名空间
	 *    localName :元素的本地名称(不带前缀)
	 *    name :元素的限定名(带前缀)
	 * 
	 */
	@Override public void endElement(String uri, String localName, String name) throws SAXException {
		if(localName.equals("person")){
			persons.add(currentPerson);
			currentPerson = null;
		}
		this.tagName = null;
	}
}

 
4 使用

public static List<Person> readXML(InputStream inStream) {
   try {
	SAXParserFactory spf = SAXParserFactory.newInstance();
	SAXParser saxParser = spf.newSAXParser(); //创建解析器
	//设置解析器的相关特性,http://xml.org/sax/features/namespaces = true 表示开启命名空间特性  
	saxParser.setProperty("http://xml.org/sax/features/namespaces",true);
	PersonContentHandler handler = new PersonContentHandler();
	saxParser.parse(inStream, handler);
	inStream.close();
	return handler.getPersons();
   } catch (Exception e) {
	e.printStackTrace();
   }
  return null;
}
分享到:
评论

相关推荐

    android下解析xml文件的demo

    本教程将详细介绍如何在Android环境下解析XML文件,以"ReadXMLDemo"为例,展示具体步骤和关键知识点。 首先,XML(eXtensible Markup Language)是一种自定义标记语言,它的结构清晰,易于读写,适合于数据交换和...

    android 解析XML文件 生成XML文件

    本文将深入探讨如何使用SAX、DOM和Pull解析器解析XML文件,以及如何生成XML文件。我们将同时展示Java和Kotlin两种语言的实现方法。 一、SAX解析XML文件 SAX(Simple API for XML)是一种事件驱动的解析器,它不会一...

    Android 解析xml文件

    本篇将深入探讨Android中解析XML文件的方法,以及如何通过示例代码`ReadXmlConfigFile`来实现这一过程。 ### XML解析器类型 Android提供了多种解析XML的方式,主要包括以下几种: 1. **DOM解析器**:Document ...

    老罗Android视频开发教程 android解析xml文件代码

    通过老罗的Android视频教程,开发者可以学习到如何有效地解析XML文件,提升在Android开发中的数据处理能力。不论是DOM、SAX还是Pull解析,每种方法都有其适用场景,理解并熟练掌握这些技术,将对Android应用开发...

    android Dom解析xml文件

    在Android开发中,XML文件广泛用于存储数据、配置和布局信息。DOM(Document Object Model)解析是处理XML文件的一种常用方法。DOM解析器将整个XML文档加载到内存中,形成一个树形结构,允许开发者通过节点操作来...

    [Android实例] Android之解析XML文件

    在Android开发中,解析XML文件是一项常见的需求。本文将详细介绍如何使用SAX(Simple API for XML)解析器来解析XML文件,并通过一个具体的实例来进行说明。 #### 二、SAX解析器简介 SAX是一种基于事件驱动的XML...

    android之Pull解析XML文件

    在Android开发中,XML(eXtensible Markup Language)是一种常用的数据交换格式,尤其是在网络通信中,用于传输数据。本文将深入探讨如何在Android中使用Pull解析器来处理XML文件,这是一种高效且节省资源的方式。 ...

    Android开发之XML文件解析的使用

    在Android开发中,XML文件解析是一项重要的技能,用于读取和操作XML数据。XML(Extensible Markup Language)是一种结构化数据格式,常用于存储和传输数据。本篇文章将重点讲解如何在Android中使用SAX(Simple API ...

    在android中使用pull解析xml文件

    在Android开发中,XML文件常用于存储数据,如配置文件、布局文件等。Pull解析器是一种轻量级的解析方式,适用于处理XML流,尤其在内存有限的移动设备上更为适用。本文将深入探讨如何在Android中使用Pull解析器解析...

    Android Dom解析XML

    在Android中,我们通常使用`javax.xml.parsers.DocumentBuilderFactory`来创建解析器,并通过`DocumentBuilder`实例解析XML文件。下面是一个简单的示例: ```java DocumentBuilderFactory factory = ...

    android开发之xml文件操作——xml创建和pull解析xml

    在Android开发中,XML文件操作是一项基础且重要的技能,它涉及到资源管理、数据持久化以及配置文件等多个方面。本项目主要关注的是XML的创建和使用Pull解析器来解析XML,这是Android系统中处理XML数据的一种高效方法...

    Android中,使用SAX和PULL解析天气预报XML

    该文章详细介绍了在Android环境下如何使用SAX和PULL解析XML,包括代码示例和步骤说明,对于初学者来说非常有帮助。 最后,压缩包中的"Weather"文件很可能是示例的天气预报XML数据。通过实际解析这个文件,你可以更...

    android 解析XML文件代码

    在Android开发中,XML文件广泛用于存储数据、配置和布局信息。XML(eXtensible Markup Language)是一种可扩展标记语言,它具有结构清晰、易于读写的特点,非常适合于应用程序间的数据交换。本教程将深入讲解如何在...

    android解析生成xml文件

    在Android开发中,生成XML文件通常涉及到资源管理、布局动态生成以及数据持久化等方面的知识。这篇博客"android解析生成xml文件"可能详细介绍了如何在Android环境中处理XML数据,包括读取、解析和生成XML文件的过程...

    解析xml文件 android

    本篇将详细介绍如何在Eclipse中解析XML文件,以及相关的Android XML解析技术。 首先,Android SDK提供了两种主要的XML解析方法:DOM(Document Object Model)和SAX(Simple API for XML)。DOM解析器将整个XML文件...

    [Android]使用SAX解析XML文件

    本篇将重点讲解如何使用SAX(Simple API for XML)解析XML文件,这是一种事件驱动的解析方式,非常适合处理大体积的XML文件,因为它不会一次性加载整个文件到内存中,从而节省了资源。 首先,了解SAX解析的基本原理...

    android解析xml文件《老罗Android开发视频教程》

    《老罗Android开发视频教程》中关于“android解析xml文件”的部分,主要涵盖了如何在Android系统中处理XML数据,包括基础的DOM解析、SAX解析以及更高效的Pull解析器。 一、DOM解析 DOM(Document Object Model)...

    【android开发】解析assets文件夹下XML资源文件

    解析XML文件,我们通常有两种方法:SAX(Simple API for XML)和Pull解析。本示例中使用了Pull解析,这是一种事件驱动的解析方式,它不需要整个XML文档加载到内存,而是按需读取,降低了内存消耗,适合处理大文件。 ...

    android开发之xml文件操作——SAX

    6. 最后,调用`parse`方法开始解析XML文件。在Android环境中,可能需要从Assets目录或网络中读取XML文件。 例如,以下是一个简单的`MySAXHandler`示例: ```java public class MySAXHandler extends ...

    android SAX PULL 解析XML文件 代码 详解

    SAX解析适合大型XML文件和复杂结构,而PULL解析则适用于小型XML文件和简单结构。在提供的`SAXParseDemo`项目中,你可以找到具体的SAX解析实现,通过阅读和理解代码,可以更好地掌握这两种解析方法的使用。 总之,...

Global site tag (gtag.js) - Google Analytics