- 浏览: 203662 次
- 性别:
- 来自: 芜湖
文章分类
- 全部博客 (139)
- 软件 (0)
- Pattern (6)
- CSDN导入 (19)
- Struts (3)
- [网站分类]1.网站首页原创 (27)
- [网站分类]6.转载区 (4)
- Hibernate (10)
- Error (8)
- [网站分类]2.Java新手区 (20)
- Java (8)
- [网站分类]4.其他技术区 (10)
- Web (1)
- C++ (2)
- Algorithm (4)
- Linux (2)
- Skill (1)
- Tech (2)
- Note (2)
- [网站分类]3.非技术区 (1)
- Database (1)
- Winty (7)
- [网站分类]1.网站首页原创Java技术区(对首页文章的要求: 原创、高质量、经过认真思考并精心写作。BlogJava管理团队会对首页的文章进行管理。) (0)
最新评论
-
haohao-xuexi02:
很不错哦。
O'Reilly cos上传组件的使用(1/3) - 上传文件 -
yoin528:
useUnicode=true&charact ...
[原]向MySQL数据库插入Blob数据的问题 -
xiaoqing20:
下载来看看!呵呵
[原]Struts2类型转换 -
xiaoqing20:
[原]Struts2类型转换
[标题]:[原]SAX使用示例
[时间]:2009-4-25
[摘要]:本文介绍了SAX解析XML的方法。还阐述了创建XMLReader两种方法。一种是使用javax.xml.parsers.SAXParser驱动,另一种是使用第三方驱动org.apache.xerces.parsers.SAXParser。
[关键字]:XML, Java,SAX,SAX Driver,SAX 驱动 , XMLReader,
xerces,SAX2.0,JAXP,
"System property org.xml.sax.driver not specified",
"SAX2 driver class org.apache.xerces.parsers.SAXParser not found"
[环境]:SAX 2.0 ,Xerces-J 2.9.1
[作者]:Winty (wintys@gmail.com) http://www.blogjava.net/wintys
[正文]:
1、SAX2.0使用org.xml.sax.XMLReader接口代替了Parser接口。如果要使用SAX解析XML,那么首先要获得XMLReader的一个实现对象。
(1)、使用javax.xml.parsers.SAXParser创建XMLReader
Sun JDK提供了javax.xml.parsers.SAXParser,由SAXParser可以获取一个XMLReader。由于javax.xml.parsers.SAXParser是JDK自带驱动,所以,直接编译就可以运行了。
factory.setValidating(true);//开启验证XML功能
SAXParser parser = factory.newSAXParser();
XMLReader reader = parser.getXMLReader();
(2)、使用第三方驱动。本例使用Xerces驱动: org.apache.xerces.parsers.SAXParser。
Xerces驱动下载地址:http://xerces.apache.org/xerces2-j/。
下载后,找到xercesImpl.jar,并将其加入到classpath路径中。如果不加入classpath路径,可以在编译运行时指定xercesImpl.jar的位置。例:
javac -cp "xercesImpl.jar;." SAXDemo.java
java -cp "xercesImpl.jar;." SAXDemo
此时,创建XMLReader代码如下:
但是运行时要指定驱动的位置:
java -Dorg.xml.sax.driver=org.apache.xerces.parsers.SAXParser SAXDemo
也可以在代码中指定具体驱动:
XMLReader reader = XMLReaderFactory.createXMLReader(driver);
或者直接创建一个XMLReader:
2、得到XMLReader对象之后就可以解析XML了。SAX是基于事件的,所以,还要设置内容事件处理器ContentHandler和其它事件处理器,DefaultHandler是对ContentHandler等事件处理接口的一个默认实现,如果熟悉AWT/Swing事件处理机制,便不难理解。当然还需要一个InputSource来指定所要解析的XML文件。
reader.setContentHandler(mySAXHandler);
reader.setErrorHandler(mySAXHandler);
reader.parse(input);//input是InputSouce类型
3、SAX解析XML完整的代码实现(注释中包含使用Xerces驱动的方法,可根据需要删除或选用):
* SAX使用示例
*
*Usage:
*如果未用到Xerces驱动,则直接编译运行。
*如果用Xerces驱动,则编译运行如下:
* javac -cp "xercesImpl.jar;." SAXDemo.java
* java -cp "xercesImpl.jar;." SAXDemo
*
* @version 2009-4-25
* @author Winty(wintys@gmail.com)
*/
import java.io.*;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.XMLReader;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.Attributes;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;
public class SAXDemo extends DefaultHandler{
Writer writer;
InputSource input;
public SAXDemo(InputSource input , Writer writer){
this.input = input;
this.writer = writer;
}
public static void main(String[] args)throws Exception{
InputSource input;
Writer writer;
SAXDemo saxDemo;
input = new InputSource(new FileReader("cdcatalog.xml"));
writer = new OutputStreamWriter(System.out);
//writer = new FileWriter("result.txt");
saxDemo= new SAXDemo(input , writer);
saxDemo.parse();
}
public void parse(){
XMLReader reader;
try{
reader = getXMLReader_Java();
/*方法2:
使用Xerces驱动:org.apache.xerces.parsers.SAXParser,
需指定:java -cp "xercesImpl.jar;." SAXDemo
*/
//如果使用Xerces驱动,则去除相应方法的注释即可。
//reader = getXMLReader_Xerces1();
//reader = getXMLReader_Xerces2();
//reader = getXMLReader_Xerces3();
MySAXHandler mySAXHandler = new MySAXHandler(writer);
reader.setFeature("http://xml.org/sax/features/validation", false);
reader.setContentHandler(mySAXHandler);
reader.setErrorHandler(mySAXHandler);
reader.parse(input);
}catch(SAXException e){
System.err.println(e.getMessage());
}catch(IOException e){
System.err.println(e.getMessage());
}
}
//方法1:使用javax.xml.parsers.SAXParser驱动
private XMLReader getXMLReader_Java()throws SAXException {
XMLReader reader = null;
try{
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
SAXParser parser = factory.newSAXParser();
reader = parser.getXMLReader();
}catch(ParserConfigurationException e){
System.err.println(e.getMessage());
}
return reader;
}
/**
*方法2-1:
*/
/*private XMLReader getXMLReader_Xerces1()throws SAXException{
String driver = "org.apache.xerces.parsers.SAXParser";
return XMLReaderFactory.createXMLReader(driver);
}*/
/* 方法2-2:
* 还需指定driver类: java -Dorg.xml.sax.driver=org.apache.xerces.parsers.SAXParser
*/
/*private XMLReader getXMLReader_Xerces2()throws SAXException{
return XMLReaderFactory.createXMLReader();
}*/
/**
* 方法2-3:
* 还需指定:javac -cp "xercesImpl.jar;."
*/
/*private XMLReader getXMLReader_Xerces3()throws SAXException{
return (new org.apache.xerces.parsers.SAXParser());
}*/
}
private Writer writer;
public MySAXHandler(Writer writer){
this.writer = writer;
}
public void startDocument()throws SAXException{
try{
writer.write("开始解析XML\n");
}catch(IOException e){
System.err.println(e.getMessage());
}
}
public void endDocument()throws SAXException{
try{
writer.write("\n解析XML结束");
writer.close();
}catch(IOException e){
System.err.println(e.getMessage());
}
}
public void startElement(String uri,
String localName,
String qName,
Attributes attributes)
throws SAXException{
try{
writer.write("<" + qName + ">");
}catch(IOException e){
System.err.println(e.getMessage());
}
}
public void endElement(String uri,
String localName,
String qName)
throws SAXException{
try{
writer.write("</" + qName + ">");
}catch(IOException e){
System.err.println(e.getMessage());
}
}
public void characters(char[] ch,int start,int length)throws SAXException{
try{
String str = new String(ch , start , length);
writer.write(str);
}catch(IOException e){
System.err.println(e.getMessage());
}
}
public void error(SAXParseException e)throws SAXException{
System.err.println(e.getMessage());
}
public void warning(SAXParseException e)throws SAXException{
System.err.println(e.getMessage());
}
public void fatalError(SAXParseException e)throws SAXException{
System.err.println(e.getMessage());
}
}
附件下载(附件内容:xercesImpl.jar、SAXDemo.java、cdcatalog.xml):SAXDemo.zip
作者:Winty (wintys@gmail.com)
博客:http://www.blogjava.net/wintys
- SAXDemo.zip (1.1 MB)
- 下载次数: 47
发表评论
-
[原]导出CodeHelp的数据
2009-03-16 17:05 861搬到blogjava总得发点原创的东西吧。 Code ... -
[原]使用Ant实现zip压缩解压功能
2009-03-19 13:17 1723[关键词]:ant,zip,unzip,Apache,压缩,解 ... -
[原]EL函数的使用
2009-04-03 21:29 1122[标题]:EL函数的使用 [时 ... -
[原]对Class.getMethod()的调用未经检查
2009-04-05 15:52 2367[标题]:对Class.getMethod()的调用未经检查 ... -
[原]JNI简单示例
2009-04-05 21:33 1041[标题]:JNI简单示例 [时 ... -
[原]简单工厂模式
2009-04-14 12:26 757[关键字]:java,设计模式,简单工厂,《java与模式》 ... -
[原]工厂模式
2009-04-14 12:32 735[关键字]:java,design pattern,设计模式, ... -
[原]抽象工厂模式
2009-04-14 19:25 761[关键字]:java,design pattern,设计模式, ... -
[原]方法返回值为数组的另一种表示方法
2009-04-25 22:28 979[时间]:2009-04-25 今天看到JDK的源代码 ... -
[原]责任链模式
2009-05-09 16:47 738[关键字]:java,design pattern,设计模式, ... -
[原]状态模式
2009-05-18 23:03 842[关键字]:java,design pattern,设计模式, ... -
[原]策略模式
2009-05-21 22:21 707[关键字]:java,design pattern,设计模式, ... -
[原]VC实现重启路由器
2009-05-29 23:36 2083[标题]:[原]VC实现重启路 ... -
[原]远程登录Windows Server 2003的当前会话
2009-06-01 11:19 2075[标题]:远程登录Windows Server 2003的当前 ... -
[原]Tomcat crossContext
2009-06-01 12:27 6104[标题]:Tomcat crossContext [时间]:2 ... -
[原]装饰模式1
2009-06-07 22:33 717[关键字]:java,design pattern,设计模式, ... -
[原]装饰模式3-Grep
2009-06-07 22:42 702[关键字]:java,design pattern,设计模式, ... -
[原]合成模式-透明的
2009-06-08 22:23 766[关键字]:java,design pattern,设计模式, ... -
[原]合成模式-安全的
2009-06-08 22:27 842[关键字]:java,design pattern,设计模式, ... -
[原]模板方法模式
2009-06-15 17:05 678[关键字]:java,design pattern,设计模式, ...
相关推荐
下面我们将通过一个具体的示例来了解SAX的基本原理及其使用方法。 #### 一、SAX简介 SAX是一种用于解析XML文档的标准接口。它以事件驱动的方式工作,当解析器遇到特定元素时会触发回调函数。这种方式特别适合于...
在XMLDemo1中,可能使用了`org.xml.sax.helpers.DefaultHandler`和`org.xml.sax.XMLReader`等类实现SAX解析。 在部署到服务器的过程中,XMLDemo可能扮演配置文件的角色,例如Spring框架中的bean定义,或者作为Web...
XML解析分为两种主要方式:DOM(Document Object Model)和SAX(Simple API for XML)。DOM解析器会将整个XML文档加载到内存中,形成一个树形结构,允许开发者遍历和修改整个文档。这种方式适合小型文档,但对大型...
下面是一个使用SAX解析RSS提要的示例代码: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class RSSHandler extends ...
它的最新版本不仅提供了最新的特性和优化,还包含了丰富的示例,帮助开发者更好地理解和使用这个库。在本文中,我们将深入探讨NativeXml329的核心特性、使用方法以及它在实际开发中的应用。 1. **核心特性** ...
这些案例通常会包含代码示例,演示如何处理开始元素、结束元素、字符数据等事件。 总结: XML解析器的选择取决于具体需求,如内存限制、处理速度、复杂查询等。DOM适用于需要频繁查询和修改文档的场景,SAX适用于大...
- 在使用SAX解析器时,开发者需要实现特定的回调函数,当解析器遇到元素开始、元素结束等事件时调用这些函数。 - 这种设计使得SAX非常适合流式处理,可以有效地处理大量数据。 - **3.3 阅读文章示例** - 使用SAX...
通过《Java原版实例手册》中的"Codesamples.PDF",读者可以找到对应的代码示例,实际动手操作以加深理解。"说明.txt"可能包含了对书中内容的进一步解释或者使用指南,而".url"文件则可能是链接到更多学习资源的网页...
本篇文章将详细介绍Java中四种主要的XML解析方法:SAX(Simple API for XML)、DOM(Document Object Model)、DOM4J和JDOM,并通过示例代码展示它们的用法。 1. **SAX解析器**: SAX是一种基于事件驱动的解析方式...
4. **XML处理**:涵盖了解析、生成XML文档,以及使用DOM、SAX和JAXB等API。 5. **反射与动态代理**:介绍了Java反射机制,用于在运行时检查和修改程序的行为。 6. **垃圾收集与内存管理**:探讨Java的自动内存管理...
这个名为"androidWebApp"的项目是一个Google提供的示例,它展示了如何在Android环境中有效地实现一个基于Web的应用程序。下面我们将深入探讨其中涉及的关键知识点。 首先,Android Web App的核心是WebView组件,它...
这比使用基于DOM(Document Object Model)或SAX(Simple API for XML)的传统XML处理方式更为直观和便捷。 JDOM-1.1.1的JAR文件是库的主要组成部分,包含所有必要的类和方法,用于读取、写入、构建和操作XML文档。...
总结一下,本示例涉及的关键知识点包括: - Socket编程:服务器与客户端的连接、数据传输。 - 文件操作:保存从Socket接收的数据到本地文件。 - XML解析:了解DOM、SAX和StAX解析器的工作原理及应用场景。 在实际...
在实际应用中,处理XML文件可能涉及到错误处理、DOM(Document Object Model)和SAX(Simple API for XML)解析策略的选择,以及XPath或XSLT(XSL Transformations)等高级功能的使用,用于查询和转换XML数据。...
这个"Android Http简单应用源码"提供了一个基础示例,展示了如何在Android应用中使用HTTP协议进行数据交换。这里我们将深入探讨其中涉及的关键知识点。 首先,Android系统对于网络访问有一套严格的权限管理机制。在...
9. **示例代码**: - 使用Java的JAX-WS创建WebService,可以定义一个方法如: ```java @WebService public class DatabaseService { @WebMethod public String getDataFromDB() { // 连接数据库,执行查询,...
在本“XML学习课件与原代码”中,我们可以深入学习XML的基本概念、语法以及如何在实际项目中应用XML。 一、XML基本概念 1. XML的全称:XML代表可扩展标记语言,它的主要目的是使数据更具结构化,便于机器理解和处理...
在Android中,解析XML通常用到的库有DOM、SAX和Pull Parser。 3. WebService:是服务提供者通过网络(通常是HTTP协议)向其他应用程序提供数据的一种方式。在Android中,可以使用SOAP(Simple Object Access ...