Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 886|回复: 0

android中使用SAX解析XML文件的应用举例

[复制链接]

该用户从未签到

发表于 2011-10-18 15:01:02 | 显示全部楼层 |阅读模式
第一步:建立名称为xml的androidproject

第二步:建立要被读取的XML文件,在xml中右键单击src,选择File,建立名称为itcast.xml的文件,内容如下

<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="23">
  <name>wangjiayu</name>
  <age>23</age>
</person>
<person id="20">
  <name>zhourui</name>
  <age>20</age>
</person>
</persons>



第三步:建立一个javabean存放XML中的每一个person对象,包名称是cn.itcast.domain,类名称是Person,如下

package cn.itcast.domain;

public class Person {
    private Integer id;
    private String name;
    private short age;
public Integer getId() {
  return id;
}
public void setId(Integer id) {
  this.id = id;
}
public String getName() {
  return name;
}
public void setName(String name) {
  this.name = name;
}
public short getAge() {
  return age;
}
public void setAge(short age) {
  this.age = age;
}
}




第四步:建立一个业务类,包名称是cn.itcast.service,类名称是SAXPersonService

package cn.itcast.service;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import cn.itcast.domain.Person;

public class SAXPersonService {
    public List&lterson> getPersons(InputStream inStream)throws Exception{  //以输入流的方式输入XML文件,以List集合返回每一个Person
     SAXParserFactory factory = SAXParserFactory.newInstance();  //得到SAX解析工厂
     SAXParser parser = factory.newSAXParser();     //得到SAX解析器
     PersonParser personParser = new PersonParser();
     /*
      * 对以输入流传入的XML文件进行解析,输入流是inStream,
      * 当解析遇到相应的元素节点或文本节点是就会调用相应的事件,这里是personParser
      */
     parser.parse(inStream, personParser);   
     return personParser.getPersons();
    }
    private final class PersonParser extends DefaultHandler{   //DefaultHandler实现了ContentHandler
        private List<Person> persons = null;     //把所有的数据都存放在List集合之中
        private String tag = null;
        private Person person = null;
  @Override
  public void characters(char[] ch, int start, int length)
    throws SAXException {
   // TODO Auto-generated method stub
   if(tag != null){
    String data = new String(ch,start,length);
    if("name".equals(tag)){
     person.setName(data);
    }else if("age".equals(tag)){
     person.setAge(new Short(data));
    }
   }
  }

  @Override
  public void endDocument() throws SAXException {
   // TODO Auto-generated method stub
   super.endDocument();
  }

  @Override
  public void endElement(String uri, String localName, String qName)
    throws SAXException {
   // TODO Auto-generated method stub
   if("person".equals(localName)){
    persons.add(person);
    person = null;
   }
   tag = null;
  }

   

  public List<Person> getPersons() {
   return persons;
  }

  @Override
  public void startDocument() throws SAXException {
   // TODO Auto-generated method stub
   persons = new ArrayList<Person>();  //当触发startDocument()方法时初始化List集合
   
  }

  @Override
  public void startElement(String uri, String localName, String qName,
    Attributes attributes) throws SAXException {
   // TODO Auto-generated method stub
   if("person".equals(localName)){  //判断元素是否是person
    Person person = new Person();
    person.setId(new Integer(attributes.getValue(0)));//为person元素的id设置值
   }
   tag = localName;    //标记不带命名空间前缀的标签
  }
     
    }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-6-9 00:07 , Processed in 0.462047 second(s), 46 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表