全栈工程师开发手册 (作者:栾鹏)
java教程全解

java使用SAX接口解析xml文件。实现解析类,从xml解析开始到结尾,每一步均会触发对象的重载函数。

测试代码,将book1.xml改成你自己的xml文件名称

//主方法,声明解析工厂和加载XML文件
public static void main(String[] argv)
{
try {
//建立SAX解析工厂
SAXParserFactory spfactory = SAXParserFactory.newInstance();
//生成SAX解析对象
SAXParser parser = spfactory.newSAXParser();
//指定XML文件,进行XML解析
parser.parse(new File("book1.xml"), new SaxParsePage());
} catch (Exception e) {
e.printStackTrace();
}
}

使用SAX接口解析xml文件类的实现

import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import java.io.*;

public class SaxParsePage extends DefaultHandler {

//文件打开时调用
public void startDocument()
{
System.out.println("***开始解析***");
}

//当遇到开始标记时调用
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));
}
}

//当分析器遇到无法识别为标记或者指令类型字符时调用
public void characters(char[] ch,int offset,int length) throws SAXException
{
System.out.println("节点数据:" + new String(ch, offset, length));
}

//当遇到节点结束时调用
public void endElement(String uri,String localName,String qName)
{
System.out.println("节点结束:" + qName);
}

//当到文档的末尾调用
public void endDocument()
{
System.out.println("****文件解析完毕****");
}
}