采用sax技术解析xml是依靠于事件驱动的,边读边解析,相关类位于javax.xml.parsers包里面
**SAXParser 此类的实例可以从SAXParserFactory的newSAXParser( )方法获得
|_ Parser( File f , DefaultHandler dh ) 两个参数 *第一个参数:xml的路径 *第二个参数:事件处理器
**SAXParserFactory 其实例可以通过本身的newInstance()方法得到
**SAX执行过程
|- 当解析到开始标签的时,自动执行startElement()方法
|- 当解析到文本的时,自动执行characters()方法
|_ 当解析到结束标签时,自动执行endElement()方法
**使用jaxp的sax方式来解析xml
*sax方式不能实现增删改操作,只能做查询操作
*打印整个xml文档
执行parse()方法,第一个参数是xml路径,第二个参数是事件处理器
**创建一个类,继承事件处理器的类
**重写里面的三个方法
public class TestSax {
public static void main(String[] args) throws Exception {
/*
* 1、创建解析器工厂
* 2、根据工厂得到解析器
* 3、调用解析器的parse方法
* 4、创建继承事件处理器的类
*/
//1、创建解析器工厂
SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();
//2、根据工厂得到解析器
SAXParser saxParser=saxParserFactory.newSAXParser();
//3、调用解析器的parse方法
saxParser.parse("src/persion.xml", new MyHandler());
}
}
class MyHandler extends DefaultHandler{
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
System.out.print("<"+qName+">");
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
System.out.print(new String(ch,start,length));
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.print("</"+qName+">");
}
}*获取到所有name的值
**定义一个成员变量flag=false
**判断开始方法是否是name元素,如果是name元素,把flag设置为true
**如果flag值为true,在character()方法里面打印内容
**当执行到结束方法时,把flag值设置成false
public class TestSax {
public static void main(String[] args) throws Exception {
/*
* 1、创建解析器工厂
* 2、根据工厂得到解析器
* 3、调用解析器的parse方法
* 4、创建继承事件处理器的类
*/
//1、创建解析器工厂
SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();
//2、根据工厂得到解析器
SAXParser saxParser=saxParserFactory.newSAXParser();
//3、调用解析器的parse方法
saxParser.parse("src/persion.xml", new MyHandler1());
}
}
class MyHandler1 extends DefaultHandler{
boolean flag=false;
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if("name".equals(qName)){
flag=true;
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(flag==true){
System.out.println(new String(ch,start,length));
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if("name".equals(qName)){
flag=false;
}
}
}*获取到第一个name的值
public class TestSax {
public static void main(String[] args) throws Exception {
/*
* 1、创建解析器工厂
* 2、根据工厂得到解析器
* 3、调用解析器的parse方法
* 4、创建继承事件处理器的类
*/
//1、创建解析器工厂
SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();
//2、根据工厂得到解析器
SAXParser saxParser=saxParserFactory.newSAXParser();
//3、调用解析器的parse方法
saxParser.parse("src/persion.xml", new MyHandler1());
}
}
class MyHandler1 extends DefaultHandler{
boolean flag=false;
int idx=1;
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if("name".equals(qName)&&idx==1){
flag=true;
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(flag==true){
System.out.println(new String(ch,start,length));
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if("name".equals(qName)){
flag=false;
idx++;
}
}
}原文地址:http://blog.51cto.com/13537308/2094994