xml解析的sax解析方式

原创 2016年08月29日 15:44:29
Sax解析(xml文件夹里面的xml文件不能用sax解析)
思路:xml解析出来的是属性值和属性内容,所以定义一个channel类,成员变量为xml的属性,这个类用来封装xml解析出来的属性内容,并且重写tostring方法,将解析出的内容显示出来,每个channel对象可以封装一条xml记录
定义一个list数组,用来存储channel对象,所以这个数组就封装了所有的xml记录,遍历这个数组,就可以显示出xml中的所有记录

准备工作:先创建一个channel类,用来封装xml中的内容,创建三个变量id,
mainact类
1:创建监听器类对象
SAXParserHelper helperHandler = new SAXParserHelper();
2:创建解析器,xmlreader
XMLReader xmlReader = SAXparserFactory
3:为解析器注册监听器
xmlreader.setcontenthandler(helperHandler)
4:得到输入流
(三种方式,在src中的xml,在assets中的xml,在res中raw的xml)
5:根据输入流得到输入源
inputsourse is = new inputsourse(stream);
6:开始解析
xmlreader.parse(is);
return heperhanler.getlist();(解释时监听器在监听,解析时会调用一个监听的方法,所以要写个监听器类)
将xml中的内容先装到channel中,创建channel对象,然后将channel对象装到list数组中,list数组在监听器中

监听器类:
监听器类中有characters,enddocument,endelement,startdocument,startelement五个重写方法
List<channel> list数组
1 监听开始时先触发startdocument方法,这个方法用于新建一个list数组对象,所以刚开始还要定义一个数组
new list<channel>
2 然后解析看到channel标签,然后会执行startelement方法,形参中有一个localname,为channel,方法中判断localname 是否为item,不是,所以if判断为false,内容没被执行
3 然后解析看到item,还是执行startelement方法,这次localname是item,执行if里面的内容,
if里面内容为
创建channel对象,
形参里面还有一个attributes ,为item的属性,有两个
然后有个for循环,
for(int i= 0,i<attributes.getlength(),i++){
if(attributes.getlocalname(i).equals("id")){
channel.setId(attributes.getvalue(i))
}else ifif(attributes.getlocalname(i).equals("url")){
channel.setId(attributes.getvalue(i))
}
这个for循环的作用,就是将解析出来的值装入channel对象中
这个startelement的内容,就是得到解析内容,然后装入对象中,形参用于得到解析内容,里面的if判断用于将内容装入channel对象中

4 只装入了item属性值,还没扫描到item里面的内容
然后扫描到内容,类似腾讯,然后会执行characters方法,形参内容有char[] ch,int start,int length
腾讯在char[] ch数组中,传入这个方法,length为char[] ch数组的长度
characters方法的内容
String theString = String.valueof(ch,start,length); 将数组内容腾讯装入String字符串中
然后做一个if判断,将内容装入到channel对象中

5 :然后扫描到item的结束标签,执行endelement方法
内容:if(localname.equals("item")){
list.add(channel);
}
这个方法作用是把channel装到list数组中

6 :然后扫描到channel结束标签,再执行endelement,不符合if判断,没作用

7:然后调用一下enddocument方法,没什么用

监听内容结束,将xml里面内容装到了一个list数组中,然后监听类中设定一个getlist方法
返回值为list数组,其他类可以通过调用这个方法来得到list数组


使用SAX方式解析XML

一、创建XML文件 目录结构: 二、新建一个带有main方法的类(SAXTest.java)public class SAXTest { public static void main(S...
  • L_in12
  • L_in12
  • 2016年07月13日 14:17
  • 5087

使用SAX方式解析XML文件

SAX方式解析XML的步骤: 1、通过SAXParseFactory的静态newInstance()方法获取SAXParseFactory实例factory 2、SAXParseFactory实例的n...
  • u014042146
  • u014042146
  • 2015年09月15日 18:16
  • 918

XML解析的两种方式:DOM方式和SAX方式

DOM:Document ObjectModel,文档对象模型。这种方式是W3C推荐的处理XML的一种方式。 SAX:Simple API for XML。这种方式不是官方标准,属于开源社区XML-D...
  • u012526194
  • u012526194
  • 2015年09月26日 14:17
  • 3520

xml文件的解析解析方式及Dom解析与Sax解析的区别

一、简单概述你常见的xml解析方式 ①DOM
  • Crazy9599
  • Crazy9599
  • 2014年06月03日 19:20
  • 1167

Java&Xml教程(五)使用SAX方式解析XML文件

Java SAX解析机制为我们提供了一系列的API来处理XML文件,SAX解析和DOM解析方式不太一样,它并不是將XML文件内容一次性全部加载,而是连续的部分加载。javax.xml.parsers....
  • Rongbo_J
  • Rongbo_J
  • 2015年12月13日 15:09
  • 1584

XML解析(一),SAX解析XML

一、概述 SAX,全称Simple API for XML,是一种以事件驱动的XMl API,是XML解析的一种新的替代方法,解析XML常用的还有DOC解析,PULL解析(Android特有),SAX...
  • ydxlt
  • ydxlt
  • 2015年12月05日 09:38
  • 15855

XML解析之SAX解析过程代码详解

上一篇谢了解析原理和过程,这里应用代码直观认识这个原理: 新建Demo1类: import java.io.File; import javax.xml.parsers.SAXParser; ...
  • qq_32059827
  • qq_32059827
  • 2016年05月31日 13:12
  • 1039

XML使用SAX解析与PULL解析的区别

XML使用SAX解析与PULL解析的区别在最近的应用中,经常会用到对XML的解析,但是一直有一个疑问就是SAX解析与PULL解析的区别到底是什么。搜索了相关的问题,整理如下,以便大家查询。我们知道,S...
  • zhliro
  • zhliro
  • 2015年07月10日 15:18
  • 1992

XML两种解析思想:DOM和SAX

一、什么是XML英文全称为Extensible Markup Language,翻译过来为可扩展标记语言。现实生活中存在着大量的数据,在这些数据之间往往存在一定的关系,我们希望能在计算机中保存和处理这...
  • wujingjing_crystal
  • wujingjing_crystal
  • 2016年09月27日 18:31
  • 808

Android中三种常用解析XML的方式(DOM、SAX、PULL)简介及区别

XML在各种开发中都广泛应用,Android也不例外。作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能。今天就由我向大家介绍一下在Android平台下几种常见的XML解...
  • cangchen
  • cangchen
  • 2015年03月03日 10:17
  • 3724
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:xml解析的sax解析方式
举报原因:
原因补充:

(最多只允许输入30个字)