首页 > 开发 > Java > 正文

java的xml编程(sax)

2020-02-05 14:00:02
字体:
来源:转载
供稿:网友
当前sax api有两个版本。我们用第二版(见资源)来做示例。第二版中的类名和方法名与第一版都有出入,但是代码的结构是一样的。

sax是一套api,不是一个解析器,所以这个代码在xml解析器中是通用的。要让示例跑起来,你将需要一个支持sax v2的xml解析器。我用apache的xerces解析器。(见资源)参照你的解析器的getting-started文档来获得调用一个sax解析器的资料。

sax api 的说明书通俗易读。它包含了很多的详细内容。而使用sax api的主要任务就是创建一个实现contenthandler接口,一个供xml 解析器调用以将分析xml文档时所发生的sax事件分发给处理程序的回调接口。

方便起见,sax api也提供了一个已经实现了contenthandler接口的defaulthandler适配器类。

一但实现了contenthandler或者扩展了defaulthandler类,你只需直接将xml解析器解析一个特定的文档即可。

我们的第一个例子扩展defaulthandler将每个sax事件打印到控制台。这将给你一个初步的映象,以说明什么sax事件将会发生及以怎样的顺序发生。

作为开始,以下是将在我们的第一个示例中用到的xml文档样本:


<?xml version="1.0"?>
<simple date="7/7/2000" >
<name> bob </name>
<location> new york </location>
</simple>


代码:
package xmltest;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import java.io.*;




public class saxtest extends defaulthandler {


// 重载defaulthandler类的方法
// 以拦截sax事件通知。
//
// 关于所有有效事件,见org.xml.sax.contenthandler
//
public void startdocument( ) throws saxexception {
system.out.println( "sax event: start document" );
}

public void enddocument( ) throws saxexception {
system.out.println( "sax event: end document" );
}

public void startelement( string namespaceuri,
string localname,
string qname,
attributes attr ) throws saxexception {
system.out.println( "sax event: start element[ " +
localname + " ]" );

// 如果有属性,我们也一并打印出来...
for ( int i = 0; i < attr.getlength(); i++ ){
system.out.println( " attribute: " +
attr.getlocalname(i) +
" value: " +
attr.getvalue(i) );
}

}

public void endelement( string namespaceuri,
string localname,
string qname ) throws saxexception {
system.out.println( "sax event: end element[ " +
localname + " ]" );
}

public void characters( char[] ch, int start, int length )
throws saxexception {

system.out.print( "sax event: characters[ " );

try {
outputstreamwriter outw = new outputstreamwriter(system.out);
outw.write( ch, start,length );
outw.flush();
} catch (exception e) {
e.printstacktrace();
}

system.out.println( " )" );

}


public static void main( string[] argv ){

system.out.println( "example1 sax events:" );
try {

// saxparserfactory spfactory = saxparserfactory.newinstance();
// saxparser sparser = spfactory.newsaxparser();


// 建立sax 2解析器...
xmlreader xr = xmlreaderfactory.createxmlreader("org.apache.xerces.parsers.saxparser");

// 安装contenthandler...
xr.setcontenthandler( new saxtest() );

// 解析文件...
xr.parse( new inputsource(
new filereader( "examplea.xml" )) );


}catch ( exception e ) {
e.printstacktrace();
}

}

}



需下载xml解析器http://xml.apache.org/dist/xerces-j/xerces-j-bin.2.5.0.zip

jdom解析xml:

http://chinaunix.net/forum/viewtopic.php?p=865198#865198
建议下载jdom8得包


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表