java中使用SAX解析XML

来源:互联网 发布:popo mac版 编辑:程序博客网 时间:2024/05/28 05:18
 java中使用SAX解析XML,下面代码源码介绍:
   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("\nName: "+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("****文件解析完毕****");
}
}
原创粉丝点击