将xml文件作为字符串进行读取

<?xml version= "1.0" encoding= "UTF-8"?>
<persons>

  <person id= "23">
    <name>李明</name>
    <age>30</age>
  </person>

  <person id= "20">
    <name>李向梅</name>
    <age>25</age>
  </person>
</persons>
package com.yanjun.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 com.yanjun.domain.Person;

public class SAXpersonService {
            
   //以输入流的形式获取xml文件,若有错误抛出异常
   public List<Person> getPerson(InputStream inputStream ) throws Throwable{
         //通过SAX解析工厂(SAXParserFactory)    
    SAXParserFactory factory = SAXParserFactory.newInstance();
     //创建解析器
    SAXParser parser = factory.newSAXParser();
     //将内部类对象放进parser.parse(inputStream, personParser);第二个参数中
    personParser personParser = new personParser();
    parser.parse(inputStream, personParser);
     //关闭流
     inputStream.close();
     return personParser.getPerson();
  }
   //通过内部类的形式对parser.parse(inputStream, handler);中第二个参数进行设置
   private final class personParser extends DefaultHandler{
         //将解析的数据放入List<Person>中
     private List<Person> persons = null;
         //做个标签
     private String tag = null;
     private Person person = null;

     // 提供一个getPerson()
     public List<Person> getPerson() {
       return persons;
    }


    @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,重复解析
        person = null;
      }
       // 中途当遇到结束节点时将tag=null
      tag = null;
    }

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

  }
}