首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

采撷SAX解析XML

2012-07-04 
采集SAX解析XML/*** * 采集SAX解析XML * 优点:解析快,占用内在少是采集的事件驱动模式解析的 * 事件驱动

采集SAX解析XML

/*** * 采集SAX解析XML * 优点:解析快,占用内在少;是采集的事件驱动模式解析的; * 事件驱动:它并不需要解析完整个文档,而是按内容的顺序解析文档, * SAX会判断当前读到的字符是否符合XML语法的某部分,如果符合就会触发事件;事件就是回调方法 *  * @author Administrator *  */public class SaxXml{/** * 解析后并返回一个对象集合 *  * @param inStream *            xml输入流 * @return 解析后并返回一个对象集合 * @throws ParserConfigurationException * @throws SAXException * @throws IOException */public List<Person> saxParser(InputStream inStream)throws ParserConfigurationException, SAXException, IOException{// 创建一个生成SAX对象的工厂SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();// 新闻一个SAX解析器SAXParser saxParser = saxParserFactory.newSAXParser();// 通过这个对象来解析:是通过驱动事件解析PersonParser personParser = new PersonParser();// 把要解析的xml输入流通过personParser解析saxParser.parse(inStream, personParser);// 关闭流inStream.close();// 返回解析后对对象集合return personParser.getPersons();}/** * 处理xml的事件类 * @author Administrator *  */private final class PersonParser extends DefaultHandler{private List<Person> persons = null;private Person person = null;private String TAG = null;public List<Person> getPersons(){return persons;}/** * 当执行到第一行时就是:开始文档语法;就会执行这个方法; * 这时我们创建一个Person的List集合 */public void startDocument() throws SAXException{persons = new ArrayList<Person>();}/** * 当符合元素语法时就会执行这个方法;我们这里判断的是; * person元素 */public void startElement(String uri, String localName, String name,Attributes attributes) throws SAXException{if ("person".equals(localName)){person = new Person();person.setId(new Integer(attributes.getValue(0)));}TAG = localName;}/** * 这里是判断的是文本节点 */public void characters(char[] ch, int start, int length)throws SAXException{if (TAG != null){if ("name".equals(TAG)){person.setName(new String(ch, start, length));} else if ("age".equals(TAG)){person.setAge(new Short(new String(ch, start, length)));}}}/** * 如果一个元素执行完后.就把这个元素放到List集合里面 * 如:当执行到</person>时会执行这个方法 */public void endElement(String uri, String localName, String name)throws SAXException{if ("person".equals(localName)){persons.add(person);person = null;}TAG = null;}}}

?

<?xml version="1.0" encoding="UTF-8"?><persons><person id="1"><name>secn1</name><age>231</age></person><person id="2"><name>secn2</name><age>232</age></person><person id="3"><name>secn3</name><age>233</age></person><person id="4"><name>secn4</name><age>234</age></person></persons>

?

public void testReadSAX() throws ParserConfigurationException, SAXException, IOException{SaxXml sax = new SaxXml();InputStream inStream = this.getClass().getClassLoader().getResourceAsStream("secn.xml");List<Person> persons = sax.saxParser(inStream);for(Person person:persons){Log.i("SaxTest", String.valueOf(person.getName()));}}

?

热点排行