xml解析的sax解析方式

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数组


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值