readxmldemo.java
import java.io.*;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
public class readxmldemo extends defaulthandler {
public static void main(string[] arguments) {
if (arguments.length > 0){
readxmldemo read = new readxmldemo(arguments[0]);
} else {
system.out.println("usage: java readxmldemo filename");
}
}
readxmldemo(string xmlfile) {
file input = new file(xmlfile);
saxparserfactory factory = saxparserfactory.newinstance();
factory.setvalidating(true);
try {
saxparser sax = factory.newsaxparser();
sax.parse(input, new xmlhandler() );
} catch (parserconfigurationexception pce) {
system.out.println("could not create that parser.");
system.out.println(pce.getmessage());
} catch (saxexception saxe) {
system.out.println("problem with the sax parser.");
system.out.println(saxe.getmessage());
} catch (ioexception ioe) {
system.out.println("error reading file.");
system.out.println(ioe.getmessage());
}
}
}
class xmlhandler extends defaulthandler {
static int reading_name = 1;
static int reading_sex = 2;
static int reading_birth = 3;
static int reading_nothing = 0;
int currentactivity = reading_nothing;
readxml xml = new readxml();
xmlhandler() {
super();
}
public void startelement(string uri, string localname, string qname, attributes attributes) {
if (qname.equals("title"))
currentactivity = reading_name;
else if (qname.equals("file"))
currentactivity = reading_sex;
//else if (qname.equals("birth"))
//currentactivity = reading_birth;
}
public void characters(char[] ch, int start, int length) {
string value = new string(ch, start, length);
if (currentactivity == reading_name)
xml.name = value;
if (currentactivity == reading_sex)
xml.sex = value;
//if (currentactivity == reading_birth)
//xml.birth = value;
}
public void endelement(string uri, string localname, string qname) {
if (qname.equals("page")) {
system.out.println("name: "+xml.name);
system.out.println("sex: "+xml.sex);
//system.out.println("birth: "+xml.birth);
xml = new readxml();
}
}
}
class readxml {
string name;
string sex;
string birth;
}
saxparsepage.java
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import java.io.*;
/**
* <p>title: 使用sax解析xml</p>
* <p>description: 使用sax接口解析book.xml文件</p>
* <p>copyright: copyright (c) 2003</p>
* <p>filename: saxparsepage.java</p>
* @version 1.0
*/
public class saxparsepage extends defaulthandler {
/**
*<br>方法说明:主方法,声明解析工厂和加载xml文件
*<br>输入参数:
*<br>返回类型:
*/
public static void main(string[] argv) {
try {
//建立sax解析工厂
saxparserfactory spfactory = saxparserfactory.newinstance();
//生成sax解析对象
saxparser parser = spfactory.newsaxparser();
//指定xml文件,进行xml解析
parser.parse(new file("book.xml"), new saxparsepage());
} catch (exception e) {
e.printstacktrace();
}
}
/**
*<br>方法说明:文件打开时调用
*<br>输入参数:
*<br>返回类型:
*/
public void startdocument() {
system.out.println("***开始解析***");
}
/**
*<br>方法说明:当遇到开始标记时调用
*<br>输入参数:
*<br>返回类型:
*/
public void startelement(string uri,
string localname,
string qname,
attributes attributes) throws saxexception {
system.out.println("节点开始:" + qname);
for(int i=0;i<attributes.getlength();i++){
system.out.println("节点属性名称:" + attributes.getqname(i));
system.out.println("节点属性值:"+attributes.getvalue(i));
}
}
/**
*<br>方法说明:当分析器遇到无法识别为标记或者指令类型字符时调用
*<br>输入参数:
*<br>返回类型:
*/
public void characters(char[] ch,
int offset,
int length) throws saxexception{
system.out.println("节点数据:" + new string(ch, offset, length));
}
/**
*<br>方法说明:当遇到节点结束时调用
*<br>输入参数:
*<br>返回类型:
*/
public void endelement(string uri,
string localname,
string qname) {
system.out.println("节点结束:" + qname);
}
/**
*<br>方法说明:当到文档的末尾调用
*<br>输入参数:
*<br>返回类型:
*/
public void enddocument() {
system.out.println("****文件解析完毕****");
}
}
闽公网安备 35060202000074号