java解析xml四种方式(2)-SAX方式
2014-05-18 16:26
246 查看
java解析xml四种方式(2)-SAX方式
为解决DOM的问题,出现了SAX。SAX ,事件驱动。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。
优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。
缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;
使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少;
为解决DOM的问题,出现了SAX。SAX ,事件驱动。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。
优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。
缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;
使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少;
package com.michael.xml.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; /** * @author michael * */ public class MySAXHandler extends DefaultHandler { boolean hasAttribute = false; Attributes attributes = null; public void startDocument() throws SAXException { System.out.println("文档开始打印了"); } public void endDocument() throws SAXException { System.out.println("文档打印结束了"); } public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (qName.equals("employees")) { return; } if (qName.equals("employee")) { System.out.println(qName); } if (attributes.getLength() > 0) { this.attributes = attributes; this.hasAttribute = true; } } public void endElement(String uri, String localName, String qName) throws SAXException { if (hasAttribute && (attributes != null)) { for (int i = 0; i < attributes.getLength(); i++) { System.out.println(attributes.getQName(0) + attributes.getValue(0)); } } } public void characters(char[] ch, int start, int length) throws SAXException { System.out.println(new String(ch, start, length)); } }
package com.michael.xml.sax; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.SAXException; import com.michael.xml.dom.XmlDocument; /** * @author michael SAX文档解析 */ public class SaxDemo implements XmlDocument { public void createXml(String fileName) { System.out.println("----" + fileName + "---"); } public void parserXml(String fileName) { SAXParserFactory saxfac = SAXParserFactory.newInstance(); try { SAXParser saxparser = saxfac.newSAXParser(); InputStream is = new FileInputStream(fileName); saxparser.parse(is, new MySAXHandler()); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { SaxDemo demo = new SaxDemo(); // demo.createXml("d:/michael_sax.xml"); demo.parserXml("d:/michael.xml"); } }
相关文章推荐
- JAVA两种XML解析方式 SAX和DOM
- Java解析XML文件的DOM和SAX方式
- JAVA解析XML的方式DOM、SAX、DOM4J、JDOM、StAX之详解与比较
- Java使用SAX,XmlPull两种方式解析XML
- 006_03Java解析XML之DOM方式与SAX方式
- JAVA解析XML的方式DOM、SAX、DOM4J、JDOM、StAX之比较
- JAVA解析XML的方式DOM、SAX、DOM4J、JDOM、StAX之详解与比较
- Java之SAX 方式解析 XML(学习笔记)
- java解析xml四种方式(3)-dom4j方式
- Java眼中的XML--文件读取--2 应用SAX方式解析XML
- JavaWeb 之 XML文档的DOM和SAX解析方式详解
- Java解析XML四种方式
- Java下3中XML解析 DOM方式、SAX方式和StAX方式
- JAVA 解析XML之SAX方式
- JAVA SAX 方式解析XML文件
- java 解析xml四种方式
- java解析xml四种方式
- Java中使用SAX方式解析XML的问题
- JAVA解析XML之SAX方式
- java中用SAX方式解析xml文件