//先创建的xml文件
<?xml version="1.0" encoding="utf-8"?>
<bookstore>
<book id="1">
<name>三体</name>
<author>刘慈欣</author>
<year>2014</year>
</book>
<book id="2">
<name>无情剑</name>
<author>古龙</author>
<year>1995</year>
</book>
</bookstore>
//主类的执行代码
package com.xml;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
public class Sax {
//通过SAX方式解析xml文件
public static void jiexi() throws Exception{
SAXParserFactory factory=SAXParserFactory.newInstance();
SAXParser p=factory.newSAXParser();
hand h= new hand();
//创建一个hander对象
p.parse("books.xml", h);
}
public static void main(String[] args) throws Exception{
jiexi();
}
}
//重写继承自DefaultHandler类中的一些方法,如下:
<span style="font-size:24px;">package com.xml;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class hand extends DefaultHandler {
int bookindex=1;
//重写遍历xml的开始标签和结束标签
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);
//当属性名为book时开始解析
if(qName.equals("book")){
System.out.println("---开始对第"+bookindex+"书进行解析---");
int a=attributes.getLength();
//输出属性名:
System.out.println("属性名为:"+qName);
//遍历属性
for(int i=0;i<a;i++){
System.out.println("属性值为:"+attributes.getValue(i));
}
}else{
if(!qName.equals("bookstore")){
System.out.print("节点名为:"+qName+" ");
}
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
if(qName.equals("book")){
System.out.println("---结束对第"+bookindex+"书进行解析---");
bookindex++;
}
}
</span><span style="font-size:32px;">//重写开始解析和结束解析的方法</span><span style="font-size:24px;">
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
System.out.println("开始解析");
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
System.out.println("结束解析");
}
/* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
*/
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
String str= new String(ch, start, length);
//如果去掉空格部为空
if(!str.trim().equals("")){
System.out.println("节点值为:"+str);
}
}
}
</span>