- 浏览: 419825 次
- 性别:
- 来自: 广州
-
文章分类
最新评论
-
u010620626:
foreach是最快的,因为php的array内部元素之间有指 ...
[流言终结者] PHP for / foreach / while 性能比较 -
ostrich_sun:
谢楼主
Sybase PowerDesigner 12.5 破解补丁/序列号/注册码 -
xuxueqin29:
为什么我这边用不上
Sybase PowerDesigner 12.5 破解补丁/序列号/注册码 -
sdpfoue:
http://www.php-internals.com/bo ...
[流言终结者] PHP for / foreach / while 性能比较 -
nakupanda:
lovelease 写道nakupanda 写道你应该去阅读一 ...
java调用microsoft translate api webservice
时间: 2007-10-13
SAX 是 Simple API for XML 的简写。虽说simple,用起来却比DOM麻烦,不过麻烦是有性能作为回报的。
SAX不会一次组织一整棵XML文档的抽象树给你使用,而是看到什么就问一下你要不要执行什么,这就是所谓的“基于事件”。
XML文件继续使用DOM和JDOM中的例子,当SAX解析器(实际上好像不应这么叫)读取文件,遇到“<books>”元素的时候,它知道这是文档开头,于是问你要不要干些什么;然后继续读取XML文档,当遇到“<book>”元素时,它又会问你要不要干些什么...直到整个XML文件被读取完毕,不过这时它还会问你,“文档读完了,你要不要干些什么呢?”...
关于这个过程,较为专业的说法是:
SAX 分析经过其的 XML 流,这非常象老式的自动收报机纸条。考虑以下 XML 代码片断:
一般情况下,SAX 处理器分析这段代码将生成以下事件:
Start document
Start element (samples)
Characters (white space)
Start element (server)
Characters (UNIX)
End element (server)
Characters (white space)
Start element (monitor)
Characters (color)
End element (monitor)
Characters (white space)
End element (samples)
SAX API 允许开发者捕获这些事件,并对它们进行操作。
SAX 处理涉及以下几步:
创建事件处理程序。
创建 SAX 解析器。
将事件处理程序分配给解析器。
对文档进行解析,将每个事件发送给处理程序。
以下是一个例子,扩展DefaultHandler类,因为此类已实现ContentHandler所有方法,所以我们使用时只需要覆盖要用到的几个方法就行了。
SAX是边读取边解析文档的,当它读到XML文件中间部分的时候,它不知道之前曾经读过些什么,也不知道以后会读到些什么,所以我们要想办法将已读的信息保存起来。因为一个books里有多个book,一个book里有title、author等属性,所以我们可以创建一个book元素的抽象对象,放到一个代表books的Hashtable里面。
这个book对象的代码:
以下是一个使用SAX读取XML文件的例子:
SAX 是 Simple API for XML 的简写。虽说simple,用起来却比DOM麻烦,不过麻烦是有性能作为回报的。
SAX不会一次组织一整棵XML文档的抽象树给你使用,而是看到什么就问一下你要不要执行什么,这就是所谓的“基于事件”。
XML文件继续使用DOM和JDOM中的例子,当SAX解析器(实际上好像不应这么叫)读取文件,遇到“<books>”元素的时候,它知道这是文档开头,于是问你要不要干些什么;然后继续读取XML文档,当遇到“<book>”元素时,它又会问你要不要干些什么...直到整个XML文件被读取完毕,不过这时它还会问你,“文档读完了,你要不要干些什么呢?”...
关于这个过程,较为专业的说法是:
SAX 分析经过其的 XML 流,这非常象老式的自动收报机纸条。考虑以下 XML 代码片断:
<?xml version="1.0"?> <samples> <server>UNIX</server> <monitor>color</monitor> </samples>
一般情况下,SAX 处理器分析这段代码将生成以下事件:
Start document
Start element (samples)
Characters (white space)
Start element (server)
Characters (UNIX)
End element (server)
Characters (white space)
Start element (monitor)
Characters (color)
End element (monitor)
Characters (white space)
End element (samples)
SAX API 允许开发者捕获这些事件,并对它们进行操作。
SAX 处理涉及以下几步:
创建事件处理程序。
创建 SAX 解析器。
将事件处理程序分配给解析器。
对文档进行解析,将每个事件发送给处理程序。
以下是一个例子,扩展DefaultHandler类,因为此类已实现ContentHandler所有方法,所以我们使用时只需要覆盖要用到的几个方法就行了。
SAX是边读取边解析文档的,当它读到XML文件中间部分的时候,它不知道之前曾经读过些什么,也不知道以后会读到些什么,所以我们要想办法将已读的信息保存起来。因为一个books里有多个book,一个book里有title、author等属性,所以我们可以创建一个book元素的抽象对象,放到一个代表books的Hashtable里面。
这个book对象的代码:
public class BookBean { private String title = ""; private String author = ""; private String url = ""; private String day =""; private String month =""; private String year =""; public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getDay() { return day; } public void setDay(String day) { this.day = day; } public String getMonth() { return month; } public void setMonth(String month) { this.month = month; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getYear() { return year; } public void setYear(String year) { this.year = year; } public String getDate() { return this.day+"-"+this.month+"-"+this.year; } }
以下是一个使用SAX读取XML文件的例子:
import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.*; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import java.util.*; public class MySAX extends DefaultHandler { private Hashtable table = null; private BookBean book = null; private String value = ""; public MySAX() { System.out.println("invoke MySAX()."); table = new Hashtable(); } public void open(String xmlfile) { try{ SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setValidating(false); SAXParser parser = spf.newSAXParser(); XMLReader myreader = parser.getXMLReader(); myreader.setContentHandler(this); InputSource source = new InputSource(xmlfile); myreader.parse(source); }catch(Exception e){ System.out.println("an error caused."); } } public static void main(String args[]) { System.out.println("main."); MySAX ms = new MySAX(); ms.open("e:/xml.xml"); Hashtable table = ms.getTable(); Enumeration enu = table.keys(); while(enu.hasMoreElements()){ String title = (String)enu.nextElement(); BookBean book = (BookBean)table.get(title); System.out.println(book.getTitle()); } } public void startDocument() throws SAXException { System.out.println("startDocument"); } public void startElement(String namespaceURI,String localName,String qName,Attributes attrs) throws SAXException { if(qName.equals("book")) { if(book!=null) table.put(book.getTitle(),book); book = new BookBean(); } } public void endElement(String namespaceURI,String localName,String qName) throws SAXException { if(qName.equals("title")) book.setTitle(value); if(qName.equals("author")) book.setAuthor(value); if(qName.equals("url")) book.setUrl(value); if(qName.equals("day")) book.setDay(value); if(qName.equals("month")) book.setMonth(value); if(qName.equals("year")) book.setYear(value); } public void characters(char ch[],int start,int length) throws SAXException { value = new String(ch,start,length); } public void endDocument() throws SAXException { table.put(book.getTitle(),book); } public Hashtable getTable() { return this.table; } }
发表评论
-
java 线程池
2011-02-11 23:19 1131package test; import java. ... -
axis 1.4 使用 digest authentication
2011-01-15 11:41 22281, 配置client-config.wsdd, 其中一个方法 ... -
[转]java中byte转换int时为何与0xff进行与运算
2010-12-01 15:15 1676在剖析该问题前请看如 ... -
java 位操作
2010-12-01 14:05 1046以下是java位操作符的小总结,具体如下: 二进制负数以它正 ... -
JAVA 进制表示
2010-11-30 10:25 1865由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使 ... -
java调用microsoft translate api webservice
2010-06-28 23:47 3986想做个东西简体转繁体,找到微软的API可用: http://m ... -
Java 获得文件编码
2010-04-15 10:24 1605package cn.net.badboy.subtitl ... -
解决 STRUTS2 GET 参数中文乱码问题
2010-03-10 11:39 7129STRUTS2中使用GET中文参数乱码问题,网上讨论这个问题的 ... -
struts2 if 中使用请求参数parameters
2010-03-09 11:32 1574#parameters.station[0]相当于<%= ... -
Google Sitemap 生成工具
2010-02-02 11:51 819如题如题 使用方式见压缩包内readme.txt ... -
xml java 类映射工具
2010-01-05 08:34 1130http://www.iteye.com/news/12756 ... -
只读的JTable
2009-10-26 09:33 1685JTable table = new JTable( ... -
JLabel中的鼠标形状
2009-10-20 08:39 1414JLabel label = new JLabel(&qu ... -
一个JUNIT4测试
2009-10-15 11:22 1335/** * */ package bookst ... -
一个提取EMAIL的正则表达式
2009-10-08 10:27 1243Pattern p = Pattern.c ... -
TextAnalyser ,分析文本中的字母出现次数、百分比等
2009-04-12 06:13 1330碰巧要做这个作业的同学低调地参考一下 public ... -
输出指定小数位数double值
2009-04-12 05:34 2789new java.math.BigDecimal(myDoub ... -
Spring简单使用
2009-03-20 12:21 1149时间: 2007-12-19 使用Spring的一些好处: ... -
使用ant构建应用
2009-03-20 12:19 1254时间: 2007-12-18 使用an ... -
一个switch中的关于变量声名和使用的问题
2009-03-20 12:17 1134时间: 2007-12-17 先看看几句简单的代码 ...
相关推荐
9. **NamespaceSupport.java**:SAX解析器通常需要处理命名空间,这个类可能实现了对XML命名空间的支持。 10. **ExtractorDriver.java**:这可能是一个主驱动类,用于启动和控制上述所有提取或解析任务。 这些程序...
总结而言,选择使用DOM或SAX解析XML文档需要考虑文档的大小、是否需要修改文档、内存资源的限制以及是否需要频繁地访问文档中的数据。对于需要频繁操作且文档不是特别大的场景,DOM可能更为合适;而对于只需要一次性...
这种解析方式便于遍历整个文档并进行修改,但对内存和CPU资源的需求较高,适合处理小型XML文件。 - **DOM解析器优点**:提供随机访问,可以轻松地修改文档的任何部分。 - **DOM解析器缺点**:对于大文件,可能会...
XML(eXtensible Markup Language)是一种用于存储和传输数据的标准格式,特别是在Java应用程序中,XML经常被用来作为数据交换的载体。Java提供了多种解析XML的API,包括SAX(Simple API for XML)、DOM(Document ...
1. **顺序性**:由于SAX是按顺序解析,因此无法随机访问XML文档中的任何部分。 2. **复杂性**:处理复杂的XML结构可能需要编写大量的事件处理代码,且代码组织相对困难。 3. **错误处理**:SAX解析器会在遇到错误时...
- JDOM库的导入和使用方法,包括创建XML文档、解析XML文件、修改XML数据等。 - JOM4J库的API介绍和使用示例,展示如何快速读写XML,以及执行XPath查询。 - 演示如何配置和实现SAX事件处理器,处理XML解析过程中的...
在Java中,有几种不同的API可以用来处理XML文档,包括DOM、SAX、JDOM和DOM4J。下面将详细介绍这四种方式。 **DOM(Document Object Model)** DOM是一种树形结构的API,它将整个XML文档加载到内存中,形成一个可...
总的来说,“JAVA100例之实例69 JAVA使用SAX解析XML”旨在帮助开发者理解并掌握SAX解析器的使用,通过编写回调函数实现对XML文档的解析和处理,提升在实际项目中的XML处理能力。通过学习这个实例,你可以更深入地...
本文将深入探讨如何使用SAX(Simple API for XML)解析器来读取XML文件,这是一种基于事件驱动的解析方式,非常适合处理大型或内存受限的环境。 SAX解析器不同于DOM(Document Object Model)解析器,DOM会将整个...
本教程将详细介绍如何在Android项目中使用SAX解析XML文件。首先,我们需要添加SAX解析器的依赖。在Android Studio的build.gradle文件中,确保已经包含了对`org.xml.sax`的支持,这通常作为Android SDK的一部分默认...
在Java中,有多种方式可以解析XML文档,其中最常用的是DOM(Document Object Model)和SAX(Simple API for XML)。本篇文章将详细介绍DOM和SAX解析XML的方法,并通过提供的`DomDemo.java`和`SaxDemo.java`示例代码...
本篇将重点讲解如何使用SAX(Simple API for XML)解析XML文件,这是一种事件驱动的解析方式,非常适合处理大体积的XML文件,因为它不会一次性加载整个文件到内存中,从而节省了资源。 首先,了解SAX解析的基本原理...
SAX(Simple API for XML)是XML解析的一种方法,它采用事件驱动的方式处理XML文档,对内存占用较少,适合处理大型XML文件。 在Java中,SAX解析器遵循XML规范,当解析XML文档时,会触发一系列的事件,如开始文档、...
XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,广泛应用于Web服务、配置文件、数据交换等...但在需要对XML文档进行结构化操作或需要随机访问的情况下,可能需要考虑使用DOM或其他解析方式。
Java 解析 XML 文件的 DOM 和 SAX 方式是指在 Java 中使用 Document Object Model(DOM)和 Simple API for XML(SAX)两种方式来解析 XML 文件的技术。下面将详细介绍这两种方式的原理、实现和优缺点。 DOM 方式 ...
- 处理事件:在事件处理器的`startElement()`、`endElement()`、`characters()`等方法中编写代码,对XML数据进行处理。 3. DOM与SAX比较: - DOM适合处理小型XML文档,且需要频繁查询和修改数据的情况,因为它能...
在Java中,SAX解析XML文件的主要优点包括: 1. **内存效率**:SAX不将整个XML文档加载到内存中,而是逐行读取,因此对于大文件,它的内存消耗远低于DOM解析器。 2. **实时处理**:SAX解析器在解析过程中触发事件,如...
在Java编程语言中,XML(eXtensible Markup Language)是一种重要的数据交换格式,用于存储和...在提供的"在java中读写XML文件.ppt"和"源码"中,可能包含了更多详细的步骤和示例代码,可以帮助你进一步理解这个主题。
Java提供了多种读写XML文件的方法,包括SAX、DOM、StAX以及JAXB等。本文将基于提供的文件信息,深入探讨如何利用Java进行XML文件的读取与写入,重点介绍DOM(Document Object Model)方式的操作。 #### DOM解析XML...
3. **创建自定义Handler**:定义一个类继承自`org.xml.sax.helpers.DefaultHandler`,并重写其中的方法以实现对XML文件的解析。 ```java class PersonParser extends DefaultHandler { // 重写方法... } ``` 4...