现在的位置: 首页 > 综合 > 正文

sax解释xml

2018年04月19日 ⁄ 综合 ⁄ 共 2246字 ⁄ 字号 评论关闭

一、创建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;
  }
 }
}

【上篇】
【下篇】

抱歉!评论已关闭.