package com.xiva.service;
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 com.xiva.domain.Person;
public class XmlContentHandler extends DefaultHandler{
private List<Person> personList;
private Person person;
private String perTag;
public List<Person> getPersonList() {
return personList;
}
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
personList = 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(perTag))
{
person.setPersonName(data);
}else if("age".equals(perTag))
{
person.setAge(data);
}
}
}
@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("id")));
}
perTag = localName;
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if("person".equals(localName) && person!=null){
personList.add(person);
person = null;
}
perTag = null;
}
}
package com.xiva.xml;
import java.io.InputStream;
import java.util.List;
import com.xiva.domain.Person;
import com.xiva.service.SAXService;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
public class XMLActivity extends Activity {
/** Called when the activity is first created. */
private static final String TAG = "XMLActivity";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView text = (TextView)this.findViewById(R.id.content);
InputStream iStream = XMLActivity.class.getClassLoader().getResourceAsStream("person.xml");
List<Person> personList;
try {
personList = SAXService.readXML(iStream);
StringBuffer strB = new StringBuffer();
for(Person person:personList)
{
String str = person.toString();
strB.append(str);
}
text.setText(strB);
}
catch(Exception e){
Log.i(TAG, "Xml Load failure!");
Toast.makeText(XMLActivity.this, "Xml Load failure!", 1).show();
e.printStackTrace();
}
}
}
完整代码见附件。
分享到:
相关推荐
本篇文章将详细介绍如何利用SAX解析器来读取XML文件内容,这是一种轻量级、事件驱动的解析方式,特别适合处理大文件。 SAX(Simple API for XML)解析器在读取XML文件时,不会一次性加载整个文件到内存,而是逐行或...
- SAX是一种事件驱动的解析器,它逐行读取XML文档,遇到元素、属性等时触发相应的事件回调。这种方式内存消耗小,适用于处理大型XML文件。 - Android中的SAX解析器实现为`org.xml.sax.helpers.DefaultHandler`,...
SAX解析器是事件驱动的,它逐行读取XML文件,遇到每个元素时触发相应的事件。这种方式适用于处理大型XML文件,因为它不需要一次性加载整个文件。 在"ReadXMLDemo"中,使用SAX解析的步骤如下: - 实现`...
1. **Android读取Excel文件**: - Android本身并不支持直接读取Excel文件,因为这些文件通常由Microsoft Office或类似的桌面应用程序创建。要读取Excel文件,需要引入第三方库,如jxl.jar,这是一个Java库,可以...
SAX是一种事件驱动的XML解析器,它不会像DOM解析器那样将整个XML文档加载到内存中,而是逐行读取,遇到每个元素或属性时触发相应的事件回调。这种方式节省了内存,特别适合处理大型XML文件。 1. **SAX解析的基本...
接着,我们可以使用`Environment.getExternalStorageDirectory()`来获取SD卡的根目录,并读取XML文件: ```java File xmlFile = new File(Environment.getExternalStorageDirectory(), "example.xml"); ``` 3....
SAX(Simple API for XML)是一种事件驱动的解析器,它不会一次性加载整个XML文档到内存,而是逐行读取,遇到元素、属性等时触发相应的事件。这种解析方式适用于处理大型XML文件,节省内存资源。以下是在Java和...
2. **SAX解析器**:Simple API for XML(SAX)解析器采用事件驱动模型,逐行读取XML文件,遇到元素、属性等时触发相应的回调函数,不会一次性加载整个文件,适合处理大文件。 3. **Pull解析器**:类似于SAX解析器,...
在Android开发中,DOM(Document Object Model)解析是一种常见的处理XML文件...不过,对于大型XML文件,可能需要考虑使用SAX(Simple API for XML)或者StAX(Streaming API for XML)等拉式解析器,以减少内存消耗。
SAX是一种基于事件驱动的XML解析方式,其工作原理是在读取XML文档时,每当遇到特定的事件(如开始标签、结束标签等)时触发相应的事件处理方法。与DOM(Document Object Model)解析方式不同,SAX不需要将整个XML...
然后,在主程序中使用SAX解析器读取XML文件: ```java SAXParserFactory factory = SAXParserFactory.newInstance(); try { SAXParser parser = factory.newSAXParser(); MyContentHandler handler = new ...
在Android开发中,读取网上XML文件是一项常见的任务,尤其当需要从远程服务器获取结构化数据时。XML(Extensible Markup Language)是一种用于存储和传输数据的标记语言,它的结构清晰,易于解析。本篇文章将深入...
4. **启动解析**:使用`org.xml.sax.XMLReader`读取XML文件并开始解析。可以使用`org.xml.sax.InputSource`来从文件、流或其他来源读取XML。 ```java import org.xml.sax.Attributes; import org.xml.sax....
总结起来,Android应用中的XML解析通常涉及DOM、SAX和Pull等多种方法,DOM解析适合对XML进行完整读取和修改,但对内存消耗较高。在选择解析策略时,应根据项目需求和资源限制来权衡。在处理XML文件时,一定要注意...
SAX解析器在读取XML文件时,会触发一系列的事件,例如开始文档、结束文档、开始元素、结束元素等。开发者需要创建一个实现了SAX解析器接口的类,即`DefaultHandler`或自定义的处理器,然后重写这些事件的方法,以便...
SAX是一种事件驱动的解析方式,它逐行读取XML文档,当遇到标签、属性或其他元素时,会触发相应的事件回调。这种解析方式内存占用小,适合处理大文件,因为它不需要一次性加载整个XML到内存。在Android中,使用SAX...
在Android开发中,由于内存限制和性能优化的需求,通常会选择SAX(Simple API for XML)解析器来读取XML文件,而非DOM(Document Object Model)解析器,因为SAX是基于事件驱动的,它按需逐个处理XML元素,占用内存...
本文将深入探讨两种主要的XML文件生成方法:SAX(Simple API for XML)和DOM(Document Object Model),并结合Android环境进行详细阐述。 首先,我们来看SAX解析器。SAX是一种事件驱动的解析器,它不会一次性加载...