关闭

sax解释xml

标签: stringintegerattributesencodingclassnull
257人阅读 评论(0) 收藏 举报
分类:

一、创建xml文件

<?xml version="1.0" encoding="UTF-8"?>
<persons>
 <person id="23">
  <name>liming</name>
  <age>30</age>
 </person>
 <person id="20">
  <name>lixiangmei</name>
  <age>25</age>
 </person>
</persons>

二、创建domain

public class Person {
 private Integer id;
 private String name;
 private Short age;
 
 public Person(){}
 
 public Person(Integer id, String name, Short age) {
  this.id = id;
  this.name = name;
  this.age = 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;
 }
 @Override
 public String toString() {
  return "Person [age=" + age + ", id=" + id + ", name=" + name + "]";
 }
 
}

三、创建解释类

public class SAXPersonService {
 
 public List<Person> getPersons(InputStream inStream) throws Throwable{
  SAXParserFactory factory = SAXParserFactory.newInstance();
  SAXParser parser = factory.newSAXParser();
  PersonParser personParser = new PersonParser();
  parser.parse(inStream, personParser);
  inStream.close();
  return personParser.getPersons();
 }

 /*
  * 建一个内部类,继承DefaultHandler,
  * 重写DefaultHandler中的方法,作为回调使用
  */
 private final class PersonParser extends DefaultHandler{
  private List<Person> persons = null;
  private String tag = null;
  private Person person = null;

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

  /*
   * 文档开始时调用
   * 即遇到<?xml version="1.0" encoding="UTF-8"?>时调用
   */
  @Override
  public void startDocument() throws SAXException {
   persons = new ArrayList<Person>();
  }
  
  /*
   * 遇到开始标签时调用
   */
  @Override
  public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
   if("person".equals(localName)){
    person = new Person();
    person.setId(new Integer(attributes.getValue(0)));
   }
   tag = localName;
  }
  
  /*
   * 遇到文本时调用
   */
  @Override
  public void characters(char[] ch, int start, int length)
    throws SAXException {
   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 endElement(String uri, String localName, String qName)
    throws SAXException {
   if("person".equals(localName)){
    persons.add(person);
    person = null;
   }
   tag = null;
  }
 }
}

0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:240009次
    • 积分:2318
    • 等级:
    • 排名:第16061名
    • 原创:28篇
    • 转载:51篇
    • 译文:0篇
    • 评论:36条
    文章分类
    最新评论