关闭

xml解析的sax解析方式

25人阅读 评论(0) 收藏 举报
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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:58次
    • 积分:20
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档