Java SAX解析xmlファイル

4683 ワード

XMLファイル:
<?xml version="1.0" encoding="UTF-8"?> 
<persons>
    <person id="1">
      <name>1</name> 
      <age>22</age>
    </person>
    <person id="2"> 
      <name>2</name> 
      <age>23</age> 
    </person>
</persons>
package xml.parse;
//person 
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;
	}
}



//  person 
package xml.parse;

import java.util.ArrayList;
import java.util.List;

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

public class PersonDefaultHandler extends DefaultHandler {
	private List<Person> persons;
	private Person person; //     person
	private String tag;  

	/**
	 *            。     
	 */
	@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)) {
			Integer id = new Integer(attributes.getValue(0)); //  id
			person = new Person();
			person.setId(id);
		}
		tag = localName;
	}

	/**
	 *   : ch   XML    start       XML          length       
	 */
	@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;
	}

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




//  
package xml.parse;

import java.util.List;

import com.sun.org.apache.xerces.internal.parsers.SAXParser;


public class SAXPerson {
	public static List<Person> getPerson() throws Exception {
		 SAXParser parser = (SAXParser) Class.forName(
		 "com.sun.org.apache.xerces.internal.parsers.SAXParser")
		 .newInstance();
		 PersonDefaultHandler handler = new PersonDefaultHandler();
		 parser.setContentHandler(handler);
		 parser.parse("D:\\person.xml");

		//           
		// InputStream inStream = SAXPerson.class.getClassLoader()
		// .getResourceAsStream("person.xml");
		// SAXParserFactory factory = SAXParserFactory.newInstance();
		// SAXParser saxParser = factory.newSAXParser();
		// PersonDefaultHandler handler = new PersonDefaultHandler();
		// saxParser.parse(inStream, handler);
		// inStream.close();

////		InputStream inStream = new FileInputStream(new File("d:\\person.xml"));
//		SAXParserFactory factory = SAXParserFactory.newInstance();
//		SAXParser saxParser = factory.newSAXParser();
//		PersonDefaultHandler handler = new PersonDefaultHandler();
//		saxParser.parse(new File("person.xml"), handler);
////		inStream.close();
		return handler.getPersons();
	}

	public static void main(String[] args) throws Exception {
		System.out.println("dddddddddddd:"+getPerson().size());
		for (int i = 0; i < getPerson().size(); i++) {
			Person person = getPerson().get(i);
			System.out.println("name:" + person.getName() + " age:"
					+ person.getAge());
		}
	}
}

http://sinye.iteye.com/blog/763895