XML学习之--sax

XMl的解析原理

通过dom和sax根据XM中层级结构在内存中分配一个树形结构,把xml标签,属性,文本分装成一个对象

sax解析方式:边解析,边驱动。

在java.xml.parsers包内:

    SAXParser    此类的实例可以从SAXParseFactory.newSAXParse()方法获得。

        parse(File f, DefaultHanldler dh)方法        File:下面了路径  DefaultHanldler:时事件处理器

        执行parse方法当把事件处理器传递过来,相当于在方法里面绑定了一个事件。

   SAXParseFactory      实例newInstance()方法得到

使用jaxp的sax方法解析xml:

sax方法只能执行查询操作

sax方式不能实现增删改操作,只能做查询操作

  1. 打印出整个文档
  2. 执行parse方法,第一个参数xml路径,第二个参数是 事件处理器
  3. 创建一个类,继承事件处理器的类,
  4. 重写里面的三个方法
package cn.sax.lianxi;

import java.io.IOException;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
  
public class Testsax {

	public static void main(String[] args) throws Exception {
		/*
		 * 1.创建解析气工厂
		 * 2.创建解析器
		 * 3.执行parse方法
		 * 4.自创一个类,继承DefaultHandler
		 * 5.重写类里的三个方法
		 */
		
		SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
		SAXParser saxParser = saxParserFactory.newSAXParser();
		saxParser.parse("saxjiexi.xml", new MyDefault1());
		
		
	}

}

class MyDefault1 extends DefaultHandler{
	boolean flag=false;
	int idx=1;
	@Override
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
//		System.out.println("start:" + qName);
		if("name".equals(qName) && idx==1)
			flag = true;
	}

	@Override
	public void endElement(String uri, String localName, String qName) throws SAXException {
		if("name".equals(qName)) {
			flag = false;
			idx++;
		}
			
//			System.out.println("end" + qName);
	}

	@Override
	public void characters(char[] ch, int start, int length) throws SAXException {
		if(flag==true)
			System.out.println(new String(ch,start,length));
		
	}
	
}

猜你喜欢

转载自blog.csdn.net/hare_you/article/details/79966961