SAX解析XML
SAX是Simple API for XML的缩写,SAX是基于事件驱动的,在用SAX解析xml文档时候,在读取到文档开始和结束标签时候就会回调一个事件,在读取到其它节点与内容时也会回调一个事件.事件源是org.xml.sax包中的XMLReader,它通过parser()方法来解析XML文档,并产生事件.事件处理器是DefaultHandler,与DOM比较而言,SAX是一种轻量型的方法.当需要一个速度快的解析器并且希望最大限度的减少应用程序的内存占用时,通常可以使用SAX解析.
具体思路是:
*创建SAXParserFactory对象
SAXParserFactoryspf = SAXParserFactory.newInstance();
*根据SAXParserFactory.newSAXParser()方法返回一个SAXParser解析器
SAXParsersp = spf.newSAXParser();
*根据SAXParser解析器获取事件源对象XMLReader
XMLReader reader = sp.getXMLReader();
*实例化一个DefaultHandler对象(StudentHandler是一事件处理器)
StudentHandler handler = newStudentHandler(students);
*连接事件源对象XMLReader到事件处理DefaultHander
reader.setContentHandler(handler);
*调用XMLReader的parse方法从输入源获取到xml数据
*通过DefaultHandler返回我们需要的数据集合
注:重点在于DefaultHandler对象中对每一个元素节点,属性,文本内容,文档内容的处理.
***************相关代码*******
//实例化一个DefaultHandler对象(StudentHandler是一事件处理器)
public class StudentHandler extends DefaultHandler {
private List<Student> mstudent;
private String mtagname;
private Student student;
public StudentHandler() {
super();
// TODO Auto-generated constructor stub
}
public StudentHandler(List<Student> mstudent) {
super();
this.mstudent = mstudent;
}
//开始解析文档
@Override
public void startDocument() throws SAXException {
super.startDocument();
}
//解析xml文档结尾
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
//解析开始标签
//元素节点
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
this.mtagname = localName;
if("student".equals(mtagname)){
student = new Student();
student .setId(Integer.valueOf(attributes.getValue("id")));
}
else if("age".equals(mtagname)){
student .setAge(Integer.valueOf(attributes.getValue(0)));
}
super.startElement(uri, localName, qName, attributes);
}
//解析标签 结束
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
this.mtagname= localName;
if("student".equals(mtagname)){
mstudent.add(student);
student = null;
}
mtagname = "";
Log.i("TAG", "infor");
super.endElement(uri, localName, qName);
}
//解析文本标签
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
String name = new String (ch,start,length);
if(!name.trim().equals("")&&"name".equals(mtagname)){
student.setName(name);
}
Log.i("TAG", "infor");
super.characters(ch, start, length);
}
}
*****************************sax解析*************
//student是一个实体类,有name,age,参数和构造方法,toString输出
public class SaxParserActivity extends Activity {
private TextView mtextview;
private ListView mlistview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.domparser);
mtextview = (TextView) findViewById(R.id.textView1);
mlistview = (ListView) findViewById(R.id.listView1);
mtextview.setText("sax解析xml");
List<Student> list = parser();
ArrayAdapter<Student> adapter = new ArrayAdapter<Student>(this,android.R.layout.simple_expandable_list_item_1,list);
mlistview.setAdapter(adapter);
}
private List<Student> parser() {
List <Student> list = new ArrayList<Student>();
try {
// 获取工厂
SAXParserFactory sax = SAXParserFactory.newInstance();
//获取sax解析器
SAXParser sf = sax.newSAXParser();
//获取事件源
XMLReader xmlreader = sf.getXMLReader();
//创建事件处理器
StudentHandler studenthandle = new StudentHandler(list);
// 将事件处理器设置到事件源
xmlreader.setContentHandler(studenthandle);
//触发解析事件,读取raw下面的文档
xmlreader.parse(new InputSource(getResources().openRawResource(R.raw.student)));
} catch (Exception e) {
// TODO Auto-generated catch block
Log.i("TAG",""+e.getMessage());
}
return list;
}
}
分享到:
相关推荐
本篇文章将详细介绍如何在Android环境中使用SAX解析器来处理从网络获取的XML文件。 1. **XML与SAX解析基础** - XML是一种结构化的文本数据表示方式,它定义了标签、属性等规则,使数据具有自解释性。 - SAX解析器...
下面详细介绍Android中使用SAX解析XML的关键步骤和相关知识点: 1. 引入库:在Android项目中,SAX解析器已经内置于`org.xml.sax`包中,无需额外导入库。 2. 创建事件处理器:你需要创建一个类来实现`...
在Android开发中,XML(Extensible Markup ...通过以上内容,你应该对Android环境下的SAX解析XML有了深入理解,可以动手实践并解决实际开发中的XML解析需求。请根据实际情况调整代码,确保其适用于你的项目需求。
本文将深入探讨Android中的SAX解析源码,帮助初学者理解其工作原理和应用。 首先,SAX解析器在Android中的实现主要依赖于`org.xml.sax`包,它提供了一系列接口和类,如`XMLReader`、`ContentHandler`、`...
在提供的压缩包文件"SaxParseXml"中,可能包含了示例代码或完整的解析项目,帮助开发者更好地理解和应用SAX解析XML的方法。通过实践这些代码,你可以更深入地掌握SAX解析技术,从而在实际的Android开发中更加...
本文将详细介绍如何在Android中使用SAX解析XML。 首先,理解SAX解析的基本原理。SAX解析器在读取XML文档时,会触发一系列的事件,例如开始文档、结束文档、开始元素、结束元素等。开发者需要创建一个实现了`...
本篇将详细讲解Android中三种主要的XML解析方式:SAX(Simple API for XML)、DOM(Document Object Model)和Pull解析器,并通过案例来帮助理解它们的工作原理和应用场景。 ### 1. SAX解析器 SAX(Simple API for...
通过以上内容,你应该对Android中使用SAX解析XML有了深入的理解。实践过程中,可以结合具体XML文件结构和业务需求,灵活运用SAX解析器进行数据处理。同时,了解和掌握错误处理机制,以应对可能出现的异常情况,是...
在Android开发中,获取并解析网络上的数据是常见的任务,特别是获取天气预报信息。Google提供了天气API服务...总的来说,SAX解析器提供了一种高效且灵活的方式来处理XML数据,是Android开发中处理网络数据的有力工具。
1. **SAX解析** SAX是一种基于事件驱动的解析器,它读取XML文件时会触发一系列事件,如开始元素、结束元素等。开发者需要为这些事件编写回调函数。SAX解析器优点是内存占用低,适合处理大文件;缺点是需要编写较多的...
本篇文章将详细介绍如何在Android中使用SAX解析XML。 首先,我们需要理解SAX解析的基本工作原理。SAX解析器在读取XML文件时会触发一系列的事件,例如开始文档、开始元素、结束元素等。开发者需要为这些事件提供回调...
理解并熟练掌握SAX解析XML是Android开发者的一项重要技能,尤其在处理大文件时能有效节省资源。通过创建自定义的ContentHandler,开发者可以灵活地解析XML文档并进行相应的业务逻辑处理。虽然SAX解析需要更多手动...
在Android开发中,XML(eXtensible Markup Language)是一种常用的数据交换格式,它结构清晰、易于阅读,...通过学习这些材料,开发者可以深入理解SAX解析机制,并将其应用到实际的Android项目中,高效地处理XML数据。
在Android中,我们可以使用`org.xml.sax`包中的类,如`DefaultHandler`和`SAXParserFactory`来实现SAX解析。 对于文件编码识别,XML文件可能以不同的编码格式保存,例如UTF-8、GBK等。在解析XML前,需要确定正确的...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛...理解并熟练运用SAX解析,将有助于提升应用的性能和用户体验。在实际项目中,我们应根据需求选择合适的解析方式,以达到最佳的性能和资源利用率。
总之,SAX解析是Android开发中处理XML数据的一种高效方法,尤其适合大文件解析。通过自定义事件处理器,我们可以灵活地处理XML数据,将其转换为应用程序所需的数据结构。在进行XML解析时,确保正确处理回调事件,以...
在Android开发中,处理XML数据是一项常见的任务,特别是在与服务器交互或者读取本地资源时...这个简单示例对于初学者理解SAX解析机制非常有帮助。在实际项目中,可以根据需求调整事件处理器,以解析XML并提取所需数据。
在提供的`SAXParseDemo`项目中,你可以找到具体的SAX解析实现,通过阅读和理解代码,可以更好地掌握这两种解析方法的使用。 总之,Android提供了SAX和PULL两种解析XML的手段,开发者可以根据具体情况灵活选择。在...
在Android项目中,通常不需要额外添加依赖,因为Android SDK已经内置了SAX解析器。 2. 创建解析器事件监听器 创建一个继承自`DefaultHandler`的类,重写其中的回调方法,例如`startElement`、`endElement`和`...
首先,我们需要理解SAX解析的基本工作原理。SAX解析器在读取XML文件时,会触发一系列的事件,如开始文档、结束文档、开始元素、结束元素等。开发者通过实现SAX解析器的回调接口,对这些事件进行处理。在Android中,...