- 浏览: 16649 次
- 性别:
- 来自: 杭州
最新评论
一边加载一边解析,速度快,内存占用小,但是如果再次使用时需要再次解析:
当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。优点:不用事先调入整个文档,占用资源少;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 3771.谷歌公司的:guava; 2.apache公司的:Co ... -
java.util.date
2014-06-17 21:58 372<div class="iteye-blo ... -
(转) spring 的jar各包作用
2014-06-01 15:03 464转自:http://blog.csdn.net/c ... -
(转)Hibernate 的jar各包作用
2014-06-01 15:02 352转自:http://blog.csdn.net/cailian ... -
(转)CyclicBarrier介绍
2014-05-28 08:17 502转自:http://www.iteye.com/topic/9 ... -
(转)Callable,Runnable比较及用法
2014-05-27 13:53 531转自:http://murielily.blog. ... -
(转)java Future 接口介绍
2014-05-27 13:52 480转自:http://blog.csdn.net/yangyan ... -
9_(JAVA基础300集最全教程 学习)自动装箱和拆箱
2014-05-16 00:08 593在JDK5.0中新增了自动装箱和拆箱,为开发人员解决了很多 ... -
8_(JAVA基础300集最全教程 学习)Collectioin各容器实现方式
2014-05-15 23:01 3711.ArrayList : 实现方式(非可序化Object数组 ... -
(转)java关键字Transient
2014-05-15 22:52 421转自:http://horst.sun.blog.163.co ... -
(转)Java使用JDBC连接Oracle_MSSQL实例
2014-05-14 23:20 485转自:http://blog.csdn.net/tungkee ... -
ant入门
2014-05-14 23:07 506这几天忙着看项目中的 ... -
(备忘)java.lang.Class类
2014-05-10 21:48 410转自:http://lavasoft.blog.51cto.c ... -
(备忘)native2ascii转码工具使用
2014-05-10 21:49 383native2ascii简介:native2ascii是sun ... -
(转)java.lang.Object类
2014-05-10 21:49 1670转自:http://lavasoft.blog.51cto.c ... -
(备忘录)xml文件的生成和解析_JDOM_4
2014-05-09 14:45 442import java.io.FileNotFou ... -
(备忘录)xml文件的生成和解析_DOM4J_3
2014-05-09 13:58 353import java.io.File; import ... -
(转)J2EE十三个规范
2014-05-09 09:48 404转自:http://www.ibm.com/developer ... -
(备忘录)xml文件的生成和解析_DOM_1
2014-05-09 09:25 731xml的解析一般分为两种方式,一种是SAX事件流的方式,另外一 ... -
7_(JAVA基础300集最全教程 学习)方法重载overload
2014-05-08 22:23 455方法重载指的是同样一个方法的多种实现方式,例如我有个加法计算方 ...
相关推荐
"sax_xml sax_解析_xml"标签表明了本压缩包包含使用SAX解析XML的示例代码。 3. **JDOM**:JDOM是一个Java API,专门用于读写XML文档。它提供了一个更面向Java的对象模型,使得XML处理更加直观。JDOM在DOM的基础上...
2. SAX解析: SAX(Simple API for XML)是一种事件驱动的解析方式,它不将整个文档加载到内存,而是逐行读取并触发相应的事件,如开始元素、结束元素等。这种方式节省了内存,适合处理大型XML文件,但需要编写更多...
在处理大型XML文件时,为了提高效率,通常会采用两种解析器:DOM(Document Object Model)和SAX(Simple API for XML)。本文将重点讨论SAX解析器,并通过描述中的"test_sax.rar"压缩包中的示例,讲解如何使用SAX...
在Java中,处理XML文件主要有两种解析器:DOM(Document Object Model)和SAX(Simple API for XML)。这两种解析方式各有特点,适用于不同的场景。 1. DOM解析: DOM解析器将整个XML文档加载到内存中,构建一个树...
本示例中,"SAX_XML.rar"包含了一个关于如何使用SAX解析XML的项目。"SaxParsePage.class"是已经编译好的Java类文件,用于执行SAX解析。"SaxParsePage.java"是对应的源代码文件,展示了如何编写SAX解析器的实现。...
一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml文件的实例
本资料包“xml.rar”主要关注Android环境下的XML解析,特别是SAX解析器,同时也涵盖了DOM和Pull解析方式。 1. XML基本概念: XML是一种自描述性的标记语言,它通过标签来定义数据结构。每个XML文档都包含元素、...
2. **SAX解析器** SAX是一种事件驱动的解析器,它逐行读取XML文档,遇到元素、属性等时触发相应的事件回调。这种方法节省了内存,但不支持随机访问,更适合处理大型XML文件。 - **SAX解析器优点**:内存效率高,...
本篇文章将重点讲解XML在Java中的解析方式,特别是DOM和SAX解析。 1. DOM解析: DOM(Document Object Model)是W3C推荐的一种处理XML文档的标准模型。它将整个XML文档加载到内存中,构建一个树形结构,允许开发者...
2. `ce_xml.cpp`:这是实现XML解析器的主要源代码文件,包含C++代码来解析XML文档。开发者可能在这里定义了XML解析的相关函数,如解析元素、属性和文本的方法。 3. `ce_xml.sln`:这是一个Visual Studio解决方案文件...
标签中的"java_sax"和"sax_xml"强调了这是关于Java语言中的SAX解析器和XML处理的资料。"java_sax_download"表明这些程序可以被下载,供开发者参考和学习。 压缩包内的文件名列表揭示了这些程序的具体功能: 1. **...
TinyXML_2_1_5是TinyXML的一个特定版本,提供了对XML文档的读取、创建和修改功能。 TinyXML库的核心特点包括: 1. **轻量级**:TinyXML的体积小,内存占用低,不依赖其他大型库,便于在资源有限的环境中使用。 2. ...
- "xml"文件可能是测试用的XML文件,用于演示DOM和SAX解析。 学习和掌握Java操作XML的这两种方法,对于开发人员来说至关重要,尤其是在处理XML数据交换、配置文件或与Web服务交互时。DOM适合小型XML文档和需要频繁...
综上所述,"android_sax_xml.zip"提供的示例旨在展示如何在Android环境中使用SAX解析XML,这对于理解XML解析的底层机制和优化移动应用的性能至关重要。通过学习和实践这个示例,开发者可以更好地处理服务器返回的XML...
这种方式使得SAX解析器在处理大型XML文件时具有较高的性能和较低的内存消耗。对于VC++开发者而言,实现SAX解析器的关键在于理解XML规范并正确地编写这些回调函数。 首先,我们需要了解SAX解析的基本流程。当解析器...
2. **SAX解析**:Simple API for XML(SAX)是一种基于事件的解析器,它不会一次性加载整个文档,而是逐个处理元素。C#中没有内置的SAX解析器,但可以使用`System.Xml.XmlReader`实现类似功能。例如: ```csharp ...
它们可能包含了针对特定XML结构的解析和生成代码,例如读取或设置摄像头的配置参数。在这样的代码中,通常会看到对XML节点的查找、创建以及值的提取和设置。 对于“XML的字符解析和分解”,这可能指的是处理XML中的...
在C语言中,XML解析库如libxml2提供了DOM和SAX解析的功能,但在“xml.rar”中,开发者可能是基于C语言实现了一个轻量级的解析器,专为处理小到中等规模的XML文件设计。这有助于避免引入大型库的依赖,同时降低了程序...
- "saxtest.xml"和"domtest.xml"是测试用的XML文件,分别用于SAX和DOM解析的测试。 5. **源代码目录**: "SRC"目录很可能包含了XML处理的Java源代码文件,这些文件可能包含XML读取、解析和写入的具体实现。 总结...