加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

(一)解析xml之sax解析

发布时间:2020-12-16 06:18:32 所属栏目:百科 来源:网络整理
导读:xml有两种解析思想分别是sax解析和xml解析,他们的解析原理分别为下图 sax解析思路:得到解析器在解析的过程中会发触发解析事件,通过解析事件解析xml文档 (1)获得解析器工厂 SAXParserFactory factory = SAXParserFactory.newInstance(); (2)通过工厂获

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文档。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读