--------------------------------------------------------------xml文件-----------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id="No1">
<name>jacky</name>
<sex>男</sex>
<age>21</age>
<address>成都</address>
</student>
<student id="No2">
<name>mexican</name>
<sex>女</sex>
<age>22</age>
<address>北京</address>
</student>
<student id="No3">
<name>david</name>
<sex>男</sex>
<age>23</age>
<address>上海</address>
</student>
<student id="No4">
<name>android</name>
<sex>男</sex>
<age>24</age>
<address>纽约</address>
</student>
</students>
================================================================================================
package org.demo.sax;
import java.io.File;
import java.io.IOException;
import java.util.Stack;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
public class DemoSAX {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
//1:构建xml解析器SAX工厂
SAXParserFactory sAXParserFactory=SAXParserFactory.newInstance();
//2:构建xml解析器SAX
SAXParser sAXParser=sAXParserFactory.newSAXParser();
sAXParser.parse(new File("student.xml"), new MyDefaultHander());
//用于使用回调读取 XML 文档
XMLReader reader=sAXParser.getXMLReader();
}
}
class MyDefaultHander extends DefaultHandler{
private Stack<String> stack=new Stack<String>();
private String name;
private String sex;
private String age;
private String address;
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
//此处进行压栈
stack.push(qName);
if(null!=attributes){
for (int i = 0; i < attributes.getLength(); i++) {
String attrName=attributes.getQName(i);
String attrValue=attributes.getValue(i);
System.out.println(attrName+"="+attrValue);
}
}
}
public void characters(char[] cs, int start, int length) throws SAXException {
//将值取出来
String target=stack.peek();
if("name".equals(target)){
name=new String(cs, start, length);
}else if("sex".equals(target)){
sex=new String(cs, start, length);
}else if("age".equals(target)){
age=new String(cs, start, length);
}else if("address".equals(target)){
address=new String(cs, start, length);
}
}
public void endElement(String uri, String localName, String qName)
throws SAXException {
stack.pop();//表示该元素已经解析完毕,需要从栈中弹出
if("student".equals(qName)){
System.out.println("name:"+name);
System.out.println("sex:"+sex);
System.out.println("age:"+age);
System.out.println("address:"+address);
System.out.println();
}
}
}