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

应用SAX解析xml文件

2012-12-25 
使用SAX解析xml文件通常解析xml文件我们主要用到的时候利用第三方的jar包如:jdom,dom4j来解析xml文件,但是

使用SAX解析xml文件

通常解析xml文件我们主要用到的时候利用第三方的jar包如:jdom,dom4j来解析xml文件,但是这里使用的是jdk自带的解析类库,使用jdk自带的类库SAX方式解析的话,解析效率会比较高:

?

?当我们使用jdk自带的解析类库的话,我们必须要继承DefaultHandler.java的类库:

xml事件处理类:

?

解析类:

/** *  */package com.sandy.xml.parse;import java.io.ByteArrayInputStream;import java.io.IOException;import java.io.InputStream;import java.util.Map;import java.util.Set;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.SAXException;import com.sandy.xml.util.XMLHandler;/** * @author sandy * */public class ParseXML {private Map<String, Object> props=null;private void parse(InputStream in) throws IOException {XMLHandler handler = new XMLHandler();SAXParserFactory factory = SAXParserFactory.newInstance();SAXParser parser = null;try {try {parser = factory.newSAXParser();parser.parse(in, handler);props = handler.getProps();} catch (ParserConfigurationException e) {System.out.println("ParserConfigurationException");e.printStackTrace();} catch (SAXException e) {System.out.println("SAXException");e.printStackTrace();}} finally {factory = null;parser = null;handler = null;}}/** * @return the props */public Map<String, Object> getProps() {return props;}public static void main(String[] args) {ParseXML xml = new ParseXML();String xmlString="<ROOT type='request'>"+"<stdmsgtype>0100</stdmsgtype>"+"<std400trcd>201101</std400trcd>"+"<stdprocode>201101</stdprocode>"+"<std400aqid>N</std400aqid>"+"<std400tlno>0279</std400tlno>"+"<stdlocdate>20100423</stdlocdate>"+"<stdloctime>110541</stdloctime>"+"<std400autl></std400autl>"+"<stdauthid></stdauthid>"+"<stdadddtap></stdadddtap>"+"<stdibsdate></stdibsdate>"+"<stdrefnum></stdrefnum>"+"<stdsetdate></stdsetdate>"+"<std400trno></std400trno>"+"<std400mgid></std400mgid>"+"<std400acur></std400acur>"+"<stdmercno>010100099970014</stdmercno>"+"<M_CODE>000000000000000025</M_CODE>"+"<M_CODETYPE>0</M_CODETYPE>"+"</ROOT>";try {xml.parse(new ByteArrayInputStream(xmlString.getBytes()));Map<String,Object> m=xml.getProps();Set<Map.Entry<String, Object>> s=m.entrySet();for(Object o:s){System.out.println(o);}} catch (IOException e) {System.out.println("解析xml出错!");e.printStackTrace();}}}

?

说明:这种解析方式是基于事件驱动的,运用的是基于观察者的设计模式.

?

热点排行