http://www.cnblogs.com/nerxious/archive/2013/05/03/3056588.html
转载自大神的自动化博客
我们知道解析xml文档有两种方式,一种是sax解析,一种是Dom解析。
二者的区别是;dom解析只能解析小文本,但是可以增删改查;sax解析可以解析大文本,但是修改不方便。
本文主要讲解sax解析:
我们知道xml文档是一种常用的保存数据的文档格式,效率高,且格式清楚,明了。
通过sax来完成对xml文档中数据的解析,来获取到xml中保存的数据,得到我们想要的东西。
sax解析主要依靠抽象类SAXParserFactory和DefaultHandler类的几个主要的方法:
characters()、startDocument() 、 endDocument()、 startElement()、 endElement()。。。
举例在startElement方法中有四个参数,startElement(startString uri,String localName,String qName,Attributes attributes)
贴核心代码:
public class SaxHandler1 extends DefaultHandler {
@Override
public void characters(char[] arg0, int arg1, int arg2) throws SAXException {
System.out.print(new String(arg0, arg1, arg2));
super.characters(arg0, arg1, arg2);
}
@Override
public void endDocument() throws SAXException { //结束文档解析的收尾方法
System.out.println("\n结束解析");
super.endDocument();
}
@Override
public void endElement(String arg0, String arg1, String arg2) throws SAXException { //结束元素解析的收尾动作
System.out.print("</");
System.out.print(arg2);
System.out.print(">");
super.endElement(arg0, arg1, arg2);
}
@Override
public void startDocument() throws SAXException { //开始文档解析的动作
System.out.println("开始解析");
String s = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
System.out.println(s);
super.startDocument(); //调用父类的startDocument方法,开始解析文档
}
@Override
public void startElement(String arg0, String arg1, String arg2,
Attributes arg3) throws SAXException {
System.out.print("<");
System.out.print(arg2);
if (arg3 != null) {
for (int i = 0; i < arg3.getLength(); i++) {
System.out.print(" " + arg3.getQName(i) + "=\"" + arg3.getValue(i) + "\"");
}
}
System.out.print(">");
super.startElement(arg0, arg1, arg2, arg3);
}
}
以上是sax的核心代码。接下来是XML文件,
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="001">
<title>Harry Potter</title>
<author>J K. Rowling</author>
</book>
<book id="002">
<title>Learning XML</title>
<author>Erik T. Ray</author>
</book>
</books>
以下是测试核心代码
public class TestDemo {
public static void main(String[] args) throws Exception {
SAXParserFactory factory = SAXParserFactory.newInstance(); //实例化SAXFactoryFactory对象
SAXParser parser = factory.newSAXParser(); //创建SAXParser解析器
File f = new File("Test.xml"); //获取要解析的File地址
SaxHandler dh = new SaxHandler(); //生成解析器
parser.parse(f, dh); //解析文档
}
}
结果截图: