`
byandby
  • 浏览: 1694102 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android xml文件解析 SAX

阅读更多
XML文件解析
XML:可扩展标记语言。
有DOM和SAX两种解析方式,下面介绍SAX解析方式
SAX:
一、什么是SAX
全称:Simple API for XML,既是指一种接口,又是指一个软件包。
作为接口,SAX是事件驱动型XML解析的一个标准接口。
它是一个标准,用来解析XML文档。基于这项标准有各种各样的实现方法,有C++版本d 实现、JAVA版本的实现。
优点:
1、逐行扫描文档,一边扫描一边解析
2、可以在解析文档的任意时刻来停止解析
缺点:
1、操作复杂
2、添加或删除内容比较麻烦
二、SAX基本原理
SAX的工作原理简单地说是对文档的顺序扫描,当扫描到文档开始与结束、元素开始与结束、文档结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。
大多数SAX实现都会产生以下类型的事件:
a)、在文档的开始和结束时触发文档处理事件。
b)、在文档内每一XML元素接受解析的前后触发元素事件
c)、任何元数据通常都由单独的事件交付
d)、在处理文档的DTD或Schema时产生DTD或Schema事件
e)、产生错误事件用来通知主机应用程序解析错误






三、SAX常用接口
每次产生一个事件都会触发相应的函数,我们要做的事情就是在这些函数里面写上处理元素的代码。
最常用的接口有ContentHandler。
ContentHandler是Java类包中一个特殊SAX接口,位于org.xml.sax包中。该接口封装了一些对事件处理的方法,当XML解析器开始解析XML输入文档时,它会遇到某些特殊的事件,比如文档的开头和结束、元素的开头和结束、以及元素中的字符数据等事件。当遇到这些事件时,XML解析器会调用ContentHandler接口中相应的方法来响应该事件。
ContentHandler接口的方法有以下几种:
返回值、方法名 描述 备注
void startDocument() 当开始读取文档时调用
void endDocument() 当文档读取结束时调用
void startElement(String uri,String localName,String qName,Attributes atts) 当开始读取一个元素(标签)时调用
void endElement(String uri,String localName,String qName) 当读取完一个元素时调用
void characters(char ch[],int start,int length) 当读取标签中间的内容时调用

二、SAX解析示例
示例1:解析一个从网上下载下来的.xml文件,并在控制台输出解析出来的内容。
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
    
    <Button
    	android:id="@+id/parseButton"
    	android:layout_width="fill_parent"
    	android:layout_height="wrap_content"
    	android:text="paresButton"
    />
</LinearLayout>



文件解析类:
package android.xml.sax;

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

public class MyContentHandler extends DefaultHandler {

	private String name,sex,age,tagName;
	
	@Override
	public void startDocument() throws SAXException {
		// TODO Auto-generated method stub
		super.startDocument();
		System.out.println("---------startDocument---------");
	}

	@Override
	public void endDocument() throws SAXException {
		// TODO Auto-generated method stub
		super.endDocument();
		System.out.println("---------endDocument---------");
	}

	
	@Override
	/**
	 * 开始解析元素
	 * String uri:URI的名称空间URI
	 * String localName:不带前缀的元素(标签)名称
	 * String name:带前缀的元素(标签)名称
	 * Attributes attributes:标签的属性
	 */
	public void startElement(String uri, String localName, String name,
			Attributes attributes) throws SAXException {
		System.out.println("name: "+name);
		tagName = localName;
		if (tagName.equals("wroker")){
			for(int i =0;i<attributes.getLength();i++){
				//第i个属性的名字,和第i个属性的值
				System.out.println(attributes.getLocalName(i) + "=" + attributes.getValue(i));
			}
		}
	}

	@Override
	public void endElement(String uri, String localName, String name)
			throws SAXException {
		// 在worker解析完之后,会打印出所有得到的数据
		if (localName.equals("worker")){
			printout();
		}
	}

	@Override
	/**
	 * 得到标签中间的内容
	 * char[] ch:标签里的内容(标签内读取出来的内容都会放在这个数组里面)
	 * int start:字符数组的起始位置(从数组的哪一位开始)
	 * int length:字符数组的起始位置(到后面多少位)
	 */
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		if (tagName.equals("name"))
			name = new String(ch,start,length);
		else if (tagName.endsWith("sex"))
			sex = new String(ch,start,length);
		else
			age = new String(ch,start,length);
	}
	
	public void printout(){
		System.out.println("name: "+name);
		System.out.println("sex: "+sex);
		System.out.println("age: "+age);
	}
}


Activity类:
package android.xml.sax;

import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;

import android.app.Activity;
import android.os.Bundle;
import android.utils.HttpDownloader;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class XMLSAXTest extends Activity {
    /** Called when the activity is first created. */
	
	private Button parseButton = null;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        parseButton = (Button)findViewById(R.id.parseButton);
        parseButton.setOnClickListener(new ParesButtonOnClickListener());
    }
    
    class ParesButtonOnClickListener implements OnClickListener{
		public void onClick(View v) {
			// TODO Auto-generated method stub
			HttpDownloader hd = new HttpDownloader();
			String resultStr = hd.download("http://dl5.csdn.net/fd.php?i=768128918158274&s=5a92e2d55af5561a2bb3c16216cc2771");
			System.out.println("resultStr: "+resultStr);
			try {
				//创建一个SAXParesFactory工厂对象
				SAXParserFactory factory = SAXParserFactory.newInstance();
				//创建一个XMLReader对象
				XMLReader xmlReader = factory.newSAXParser().getXMLReader();
				//为XMLReader设置内容处理器
				xmlReader.setContentHandler(new MyContentHandler());
				//开始解析文件
				xmlReader.parse(new InputSource(new StringReader(resultStr)));
			} catch (Exception e) {
				e.printStackTrace();
			}
			
		}
    }
}


除此之外还需要上传文件的类,前面已经写过了在这里就不贴代码了


项目源码已经上传,有需要的可以下载。
  • 大小: 26.4 KB
  • 大小: 30.6 KB
2
0
分享到:
评论

相关推荐

    android xml 的解析 sax dom pull 解析

    总结,Android中XML解析的三种方式各有优缺点:SAX适合大文件,低内存占用;DOM适合灵活操作,但内存需求大;PULL结合了两者优点,既高效又易于使用。根据实际项目需求和资源限制,开发者可以选择最适合的XML解析...

    Android XML解析之SAX解析

    SAX解析器逐行读取XML文档,当遇到开始标签、结束标签、文本内容等元素时,会触发相应的回调函数,开发者可以在这些回调函数中处理数据。这种方式节省了内存,因为不需要一次性加载整个XML到内存中。 下面我们将...

    Android XML解析——Sax解析XML

    XML解析是将XML文档转换为应用程序可以处理的数据的过程。本篇文章将重点讨论Android中的SAX(Simple API for XML)解析器,这是一种事件驱动的解析方法,适合处理大文件或内存有限的设备。 ### SAX解析原理 SAX...

    android下解析xml文件的demo

    DOM解析器将整个XML文件加载到内存中,形成一个树形结构,可以方便地遍历和修改XML文档的任何部分。然而,由于它需要一次性加载整个文件,对于大文件来说可能会消耗大量内存。 在"ReadXMLDemo"中,使用DOM解析的...

    Android XML解析之SAX方式

    本篇文章将重点讨论SAX解析器,一种事件驱动的解析模型,它以流式处理XML文档,具有内存占用低、处理大型文件效率高的特点。 **SAX解析器工作原理** SAX解析器不会将整个XML文档加载到内存中,而是逐行读取XML文件...

    android使用SAX解析xml

    - Android提供了两种主要的XML解析方式:DOM(文档对象模型)和SAX。DOM解析器将整个XML文档加载到内存中形成一棵树,适合小规模数据;SAX则更适用于大文件,因为它按需解析。 3. **SAX解析流程** - 创建`...

    android解析XML文件样例SAX方法

    SAX(Simple API for XML)是XML解析器的一种,它采用事件驱动的方式,以流式处理XML文档,适合处理大型XML文件,因为它不需要一次性加载整个文档到内存中。本篇文章将详细介绍如何在Android平台上使用SAX方法解析...

    Android 创建与解析XML Sax方式

    总结,Android中的XML解析主要有DOM、SAX和XMLPullParser三种方式,每种都有其适用场景。SAX适用于处理大文件和节省内存,而DOM适用于需要频繁查询和修改的场景,XMLPullParser则提供了一种介于两者之间的灵活性。...

    Android XML解析 SAX DOM Pull

    在Android中,有三种主要的XML解析方式:SAX(Simple API for XML)、DOM(Document Object Model)和Pull Parser。下面将详细介绍这三种解析方式,并结合person类的实例进行讲解。 1. SAX解析: SAX是一种事件驱动...

    android xml多种解析生成

    本文介绍了 Android 中使用多种解析和生成 XML 文件的方法,包括 SAX、DOM 和 Pull 解析器,以及 XmlSerializer 序列化器。这些方法可以帮助开发者更好地处理 XML 文件,并且提高应用程序的性能。

    android XML文件解析

    SAX(Simple API for XML)是一种基于事件驱动的解析器,它以流式方式处理XML文档,适用于处理大型XML文件,因为它不需要一次性加载整个文件到内存中。下面我们将详细介绍如何在Android中利用SAX框架模型实现XML文件...

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

    本文将深入探讨如何在Android中使用两种常见的XML解析技术——SAX(Simple API for XML)和PULL(Pull Parser)来解析天气预报的XML数据。这两种方法各有优缺点,适用于不同的场景。 首先,我们来看SAX解析器。SAX...

    xml.rar_android_android sax_android sax xml_java xml_sax

    本资料包“xml.rar”主要关注Android环境下的XML解析,特别是SAX解析器,同时也涵盖了DOM和Pull解析方式。 1. XML基本概念: XML是一种自描述性的标记语言,它通过标签来定义数据结构。每个XML文档都包含元素、...

    Android XML解析(DOM、PULL、SAX三种方式)

    Android系统提供了三种主要的XML解析方式:DOM(Document Object Model)、PULL(Pull Parser)和SAX(Simple API for XML)。每种方法都有其独特的特性和应用场景,下面将详细介绍这三种XML解析方式。 1. DOM解析...

    [Android]使用SAX解析XML文件

    SAX解析器在读取XML文件时,会触发一系列的事件,例如开始文档、结束文档、开始元素、结束元素等。开发者需要创建一个实现了SAX解析器接口的类,即`DefaultHandler`或自定义的处理器,然后重写这些事件的方法,以便...

    Android之SAX解析XML

    创建XML解析器事件处理器 为了处理SAX解析器触发的事件,我们需要创建一个继承自`DefaultHandler`的类,并重写相关的方法,如`startElement`、`endElement`和`characters`等。例如: ```java import org.xml.sax....

    XML解析之SAX解析DEMO

    本文将深入探讨XML解析中的SAX(Simple API for XML)解析方法,并结合一个具体的Android 4.0网络编程示例进行详细讲解。 SAX解析是一种基于事件驱动的解析方式,它不会一次性加载整个XML文档到内存,而是逐行读取...

    android XML文件解析和序列化 demo

    在Android开发中,XML文件广泛用于存储数据、配置文件...这个示例涵盖了XML解析和序列化的基础,帮助开发者理解如何在Android应用中处理XML数据。通过学习这个demo,你可以更好地掌握XML在Android环境中的实际应用。

    Android XML 文件解析

    本资源重点介绍了Android中的三种XML解析技术:SAX(Simple API for XML)、DOM(Document Object Model)和Pull解析器。下面将详细阐述这三种解析方法及其应用场景。 1. **SAX解析**: SAX是一种基于事件驱动的...

Global site tag (gtag.js) - Google Analytics