- 浏览: 15446 次
- 性别:
- 来自: 杭州
最新评论
一边加载一边解析,速度快,内存占用小,但是如果再次使用时需要再次解析:
当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少
当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少
package com.ailk.xmlparserdemon; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.sax.SAXTransformerFactory; import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.stream.StreamResult; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.AttributesImpl; import org.xml.sax.helpers.DefaultHandler; import com.ailk.xmlparserdemon.intf.XmlDocument; public class SaxXmlDemon implements XmlDocument { static String filename; public void createDocument(String fileName) { try { StreamResult result=new StreamResult(new FileOutputStream(filename)); SAXTransformerFactory sf=(SAXTransformerFactory) SAXTransformerFactory.newInstance(); TransformerHandler th=sf.newTransformerHandler(); th.setResult(result); Transformer tf=th.getTransformer(); tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); tf.setOutputProperty(OutputKeys.INDENT, "yes"); th.startDocument(); AttributesImpl atts=new AttributesImpl(); th.startElement("", "", "employees", atts); th.startElement("", "", "employee", atts); th.startElement("", "", "name", atts); th.characters("小明".toCharArray(), 0, "小明".length()); th.endElement("", "", "name"); th.startElement("", "", "sex", atts); th.characters("m".toCharArray(), 0, "m".length()); th.endElement("", "", "sex"); th.startElement("", "", "parents", atts); th.startElement("", "", "father", atts); th.characters("小张".toCharArray(), 0, "小张".length()); th.endElement("", "", "father"); th.startElement("", "", "mother", atts); th.characters("小慧".toCharArray(), 0, "小慧".length()); th.endElement("", "", "mother"); th.endElement("", "", "parents"); th.endElement("", "", "employee"); th.endElement("", "", "employees"); th.endDocument(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (TransformerConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (TransformerFactoryConfigurationError e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void parserDocument(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) { SaxXmlDemon sax = new SaxXmlDemon(); SaxXmlDemon.filename = "E:\\OneNote\\dom1.xml"; sax.createDocument(filename); sax.parserDocument(filename); } } 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)); } }
发表评论
-
开发工具备忘
2014-06-19 23:41 3281.谷歌公司的:guava; 2.apache公司的:Co ... -
java.util.date
2014-06-17 21:58 331<div class="iteye-blo ... -
(转) spring 的jar各包作用
2014-06-01 15:03 435转自:http://blog.csdn.net/c ... -
(转)Hibernate 的jar各包作用
2014-06-01 15:02 327转自:http://blog.csdn.net/cailian ... -
(转)CyclicBarrier介绍
2014-05-28 08:17 451转自:http://www.iteye.com/topic/9 ... -
(转)Callable,Runnable比较及用法
2014-05-27 13:53 496转自:http://murielily.blog. ... -
(转)java Future 接口介绍
2014-05-27 13:52 436转自:http://blog.csdn.net/yangyan ... -
9_(JAVA基础300集最全教程 学习)自动装箱和拆箱
2014-05-16 00:08 537在JDK5.0中新增了自动装箱和拆箱,为开发人员解决了很多 ... -
8_(JAVA基础300集最全教程 学习)Collectioin各容器实现方式
2014-05-15 23:01 3331.ArrayList : 实现方式(非可序化Object数组 ... -
(转)java关键字Transient
2014-05-15 22:52 395转自:http://horst.sun.blog.163.co ... -
(转)Java使用JDBC连接Oracle_MSSQL实例
2014-05-14 23:20 451转自:http://blog.csdn.net/tungkee ... -
ant入门
2014-05-14 23:07 472这几天忙着看项目中的 ... -
(备忘)java.lang.Class类
2014-05-10 21:48 380转自:http://lavasoft.blog.51cto.c ... -
(备忘)native2ascii转码工具使用
2014-05-10 21:49 329native2ascii简介:native2ascii是sun ... -
(转)java.lang.Object类
2014-05-10 21:49 1624转自:http://lavasoft.blog.51cto.c ... -
(备忘录)xml文件的生成和解析_JDOM_4
2014-05-09 14:45 401import java.io.FileNotFou ... -
(备忘录)xml文件的生成和解析_DOM4J_3
2014-05-09 13:58 316import java.io.File; import ... -
(转)J2EE十三个规范
2014-05-09 09:48 373转自:http://www.ibm.com/developer ... -
(备忘录)xml文件的生成和解析_DOM_1
2014-05-09 09:25 685xml的解析一般分为两种方式,一种是SAX事件流的方式,另外一 ... -
7_(JAVA基础300集最全教程 学习)方法重载overload
2014-05-08 22:23 431方法重载指的是同样一个方法的多种实现方式,例如我有个加法计算方 ...
相关推荐
使用java语言对XML文档进行解析的示例,包括DOM,SAX方式,并包括使用jdom和jom4j框架进行XML解析或生成XML文档
用C#编写的XML解析器,DOM和SAX都有实现
一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml文件的实例
使用Sax解析XML,演示了如何使用SAX接口来解析xml,有主要方法的介绍。
android xml解析,sax pull dom三个解析
Java解析XML汇总DOM_SAX_JDOM_DOM4j_XPath 实例
java学习笔记——使用DOM解析XML和使用SAX解析XML
DOM 解析 基本操作 SAX 解析 基本操作 上学期XML的一个小作业,都是一些基本操作,刚学XML的同学们拿来玩玩
本程序使用XML的SAX(Simple API for XML)机制,实现了读取XML文档内容的功能,
XML_XSL_DTD_SCHEMA_SAX_DOM_JDOM_WEBSERVICE简介.pdf
java操作xml,包括dom、sax解析
java操作xml文件的各种代码,关于DOM和sax的部分非常详细,注释很清楚
采用SAX等技术实现的xml文件生成和解析Demo,内含多个Demo,代码测试通过。
利用java操作xml的源代码,包括DOM和SAX两种方式
Sax解析XML文件解
Android_SAX_方式解析XML_字符串
支持SAX解析XML文件,DOM解析XML文件,Pull解析器解析XML文件,Pull生成XML文件,JAVA和Kotlin两种语言编写
SAX解析超大XML文件 示例代码 SAX解析超大XML文件 示例代码 SAX解析超大XML文件 示例代码
用sax写的生成大XML文件。 用SAX写的解析大XML文件。 在解析大的XML文件,从java语言来说的话,目前应该SAX是比较好用的一个框架。
XML文件解析器 支持dom解析和sax模式解析,c语言实现