一解析xml之sax解析

xml有两种解析思想分别是sax解析和xml解析,他们的解析原理分别为下图



sax解析思路:得到解析器在解析的过程中会发触发解析事件,通过解析事件解析xml文档

(1)获得解析器工厂

SAXParserFactory factory = SAXParserFactory.newInstance();

(2)通过工厂获得sax解析器

SAXParser parser = factory.newSAXParser();

(3)获取读取器

XMLReader reader = parser.getXMLReader();

(4)注册解析事件

reader.setContentHandler(new MycontentHandler());

(5)解析xml

reader.parse("文件");



例子:利用sax解析思想解析xml文件

需要解析的xml文件

<?xml version="1.0" encoding="UTF-8"?>

<书架>
  <书>
    <书名>Java就业培训教程</书名>
    <作者>小凌</作者>
    <售价>39.00元</售价>
    <特价>20</特价>
  </书>
  <书>
    <书名>JavaScript网页开发</书名>
    <作者>张孝祥</作者>
    <售价>28.00元</售价>
  </书>
</书架>
解析的Java代码

package saxdemo;

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

import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;

public class sax {
	
	public sax()throws Exception{
		//1获得解析器工厂
		SAXParserFactory factory = SAXParserFactory.newInstance();
		//2通过工厂获得sax解析器
		SAXParser parser = factory.newSAXParser();
		//3获得读取器
		XMLReader reader = parser.getXMLReader();
		//4注册事件
		reader.setContentHandler(new MycontentHandler());
		//5解析xml
		reader.parse("book.xml");
		}
}

//注意:继承DefaulHandler,可以只覆盖自己想用的函数。
class MycontentHandler implements ContentHandler{


	//文档开始
	public void startDocument() throws SAXException {
		System.out.println("文档开始");
	}
	//标签开始
	public void startElement(String arg0,String arg1,String arg2,Attributes arg3) throws SAXException {
		System.out.println("标签开始"+arg2);
	}
	//文档结束了
	public void endDocument() throws SAXException {
		System.out.println("文档结束了");
	}
        //标签结束
	public void endElement(String arg0,String arg2)
			throws SAXException {
		System.out.println("标签结束了"+arg2);
	}
	//接收字符数据的通知。
	public void characters(char[] arg0,int arg1,int arg2) throws SAXException {
		System.out.println(new String(arg0,arg1,arg2));
	}
	
	
	public void endPrefixMapping(String arg0) throws SAXException {
		
	}
	public void ignorableWhitespace(char[] arg0,int arg2)
			throws SAXException {
		
	}
	public void processingInstruction(String arg0,String arg1)
			throws SAXException {
		
	}
	public void setDocumentLocator(Locator arg0) {
		
	}

	public void skippedEntity(String arg0) throws SAXException {
		
	}
	public void startPrefixMapping(String arg0,String arg1)
			throws SAXException {
	}
}
注意:解析的时候空格也会被当做一个元素,对于上面的函数可以查看jdk文档。

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念