欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SAX方式解析XML文档

程序员文章站 2022-06-16 13:53:23
...

一、SAX (Simple API for XML)
  SAX解析方式是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束、文档(document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。

优点: 无需将整个文档加载到内存中, 所以内存消耗少的 ,适合解析特别大的 XML文件。

二、步骤
创建解析工厂:通过 SAXParaserFactory.newInstance()方法获取
创建解析器:通过newSAXParser()获取
执行 parser 方法,传入两个参数:XML文件路径、事件处理器
创建一个类,继承 DefaultHander 类 ,重写三个方法 :
startElement(String uri, String localName, String qName, Attributes attributes):获取开始标签

qName :把 开始 标签名称返回
attributes :返回标签中的属性对象

characters(char[] ch, int start, int length):获取标签文本内容
endElement(String uri, String localName, String qName):获取结束标签
三、实现代码
1、XML文档

<?xml version="1.0" encoding="UTF-8"?> <!-- 第一句为固定的声明语句 -->
<person> <!--开始标签,可任意定义,但要有对应的结束标签--><!-- person也是根节点 -->
    <p1> <!-- person的一个子节点 -->
        <name address="beijing">zhangsan</name>
        <age>20</age>
    </p1>
    <p1>
        <name>wangwu</name>
        <age>29</age>
    </p1>
</person> <!--结束标签,与开始标签对应-->

2、SAX方式解析XML文档的Java代码
package com.hdl.Saxparser;

import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;
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 MySAXParserTest {

public static void main(String[] args) {
    try {
        // 1、创建SAX解析器工厂
        SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
        // 2、创建SAX解析器
        SAXParser saxParser = saxParserFactory.newSAXParser();
        // 3、执行parser方法
        saxParser.parse("conf/persons.xml", new MyHandler());
    } catch (ParserConfigurationException e) {
        e.printStackTrace();
    } catch (SAXException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}

class MyHandler extends DefaultHandler{

/* (non-Javadoc)
 * @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
 */
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
    super.startElement(uri, localName, qName, attributes);
    System.out.print("<" + qName + ">");
}

/* (non-Javadoc)
 * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
 */
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
    super.characters(ch, start, length);
    System.out.print(new String(ch, start, length));
}

/* (non-Javadoc)
 * @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String, java.lang.String, java.lang.String)
 */
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
    super.endElement(uri, localName, qName);
    System.out.print("<" + qName + ">");
}

}
   3、解析结果
SAX方式解析XML文档

相关标签: Java