XML(eXtended Markup Language,可扩展标记性语言)提供了一套跨平台,跨网络,跨程序的语言数据描述方式,使用XML可以方便地实现数据交换,系统配置,内容管理等常见功能。 |
使用SAX 解析XML文件,是顺序读入需要的文件内容,不受文件大小的限制,由于采用部分读取,只能对文件按从头到尾解析一遍,不支持文件的随意存取,只能读着xml文件的内容,但不能修改,当然,这种解析方式,在开发上比较复杂,需要自定义事件处理器,对于开发人员更加灵活,可以用sax建立对xml对象模型。
现在开始用代码来实现SAX解析的方法,如下:
XML文件如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <?xml-stylesheet type="text/css" href="attrib.css"?>
- <addresslist>
- <linkman id="zlj">
- <name>xt</name>
- <email>xxxx@sina.com</email>
- </linkman>
- <linkman id="zs">
- <name>张三</name>
- <email>XXXXX@sina.com</email>
- </linkman>
- </addresslist>
首先要自定义一个SAX的XML解析器,代码如下:
- package com.etc.sax;
- import org.xml.sax.Attributes;
- import org.xml.sax.SAXException;
- import org.xml.sax.helpers.DefaultHandler;
- /**
- * 用sax来解析xml
- * sax 解析器
- * @author zhang lj
- *
- * 2012-12-19
- */
- public class MySax extends DefaultHandler{
- @Override
- public void startDocument() throws SAXException { //文档开始
- System.out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
- }
- @Override
- public void endDocument() throws SAXException {
- System.out.println("\n 文档读取结束 ............");
- }
- @Override
- public void startElement(String uri, String localName, String name,
- Attributes attributes) throws SAXException {
- System.out.print("<");
- System.out.print(name);
- if(attributes!=null){
- for(int i=0;i<attributes.getLength();i++){
- System.out.print(""+attributes.getQName(i)+"=\""+attributes.getValue(i)+"\"");
- }
- }
- System.out.print(">");
- }
- @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 name)
- throws SAXException {
- System.out.print("</");
- System.out.print(name);
- System.out.print(">");
- }
- }
然后对XML文件进行解析,代码如下:
- package com.etc.sax;
- import javax.xml.parsers.SAXParser;
- import javax.xml.parsers.SAXParserFactory;
- /**
- *
- * @author zhang lj
- *
- * 2012-12-19
- */
- public class TestSAX {
- public static void main(String[] args) throws Exception {
- SAXParserFactory factory=SAXParserFactory.newInstance();
- SAXParser parser=factory.newSAXParser();
- parser.parse("sax_demo.xml", new MySax());
- }
- }
到这边解析 就完成了,让我们再看一下dom解析 和sax解析 的区别吧,
区别如下: