1 import java.io.InputStream;
2 import java.util.ArrayList;
3 import java.util.List;
4 import javax.xml.parsers.SAXParser;
5 import javax.xml.parsers.SAXParserFactory;
6
7 import org.xml.sax.Attributes;
8 import org.xml.sax.SAXException;
9 import org.xml.sax.helpers.DefaultHandler;
10 /**
11 * 采用SAX解析XML
12 * @author GIS
13 *
14 */
15 public class SAXService {
16
17 public List<Person> getHongXml(InputStream inStream) throws Throwable {
18 SAXParserFactory factory = SAXParserFactory.newInstance();
19 SAXParser parser = factory.newSAXParser();
20 ContentParser contentParser = new ContentParser();
21 parser.parse(inStream, contentParser);
22 inStream.close();
23 return contentParser.getPersons();
24 }
25 private final class ContentParser extends DefaultHandler{
26 private List<Person> persons = null;
27 public List<Person> getPersons() {
28 return persons;
29 }
30
31 private String tag = null;
32 private Person person = null;
33 @Override
34 public void startDocument() throws SAXException {
35 persons = new ArrayList<Person>();
36 }
37
38 @Override
39 public void startElement(String uri, String localName, String qName,
40 Attributes attributes) throws SAXException {
41 if ("person".equals(localName)) {
42 person = new Person();
43 person.setId(new Integer(attributes.getValue(0)));
44 }
45 tag = localName;
46 }
47
48 @Override
49 public void endElement(String uri, String localName, String qName)
50 throws SAXException {
51 if ("person".equals(localName)) {
52 persons.add(person);
53 person =null;
54 }
55 tag = null;
56 }
57
58 @Override
59 public void characters(char[] ch, int start, int length)
60 throws SAXException {
61 if (tag != null) {
62 String data = new String(ch, start, length);//获取文本节点的数据
63 if ("name".equals(tag)) {
64 person.setName(data);
65 }else if ("age".equals(tag)) {
66 person.setAge(new Short(data));
67 }
68 }
69 }
70
71 }
72
73 }