SAX解析xml基础

前端之家收集整理的这篇文章主要介绍了SAX解析xml基础前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

SAX解析xml基础



SAX解析原理


加载一点,读取一点,处理一点,如果读取到内容你不使用的话,就没有了。

SAX解析的工具


sun公司提供的解析工具,已经内置在JDK中。

核心API


在javax.xml.parsers包中的SAXparser类中存在大量的方法让我们去使用SAX解析。
* SAXparser类:用于读取和解析xml文件对象
* parse(File f,DefaultHandler dh)方法,是我们常用的解析xml的方法
* File f 参数代表将要读取的xml文件
* DefaultHandler dh 参数是SAX事件处理程序,它是SAX时间处理程序的基类,所以我们通常不会直接去new其对象,而是采用其子类去new该类的对象。
* startDocument(); //在读到文档开始时调用
* endDocument();//读到文档的结束时会调用
* startElement();//在读到开始标签调用属性也被在该函数的参数中传递
* endElement();//读到文档的结束标签调用
* characters();//读到文本内容调用方法

DefaultHandler类的使用原则


因为DefaultHandler类是所有SAX解析程序的基类,对于这种基类,我们一般不会直接事情其构造对象,在本文的测试实例中,我们继承了DefaultHandler类,实现了自己的MyDefaultHandler类,并重写了其中的5个方法,在这5个方法中写我们自己的处理逻辑。

代码实现


  • TestSAXParser.java@H_403_17@
package com.jpzhutech.sax;

import java.io.File;
import java.io.IOException;

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

import org.xml.sax.SAXException;

public class TestSAXParser {
    public static void main(String[] args)throws IOException{

        try {
            //创建SAXparser对象
            SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();  //用工厂拿到SAXParser的实例,因为SAXParser的构造方法是protected

            //调用开始解析xml文档
            saxParser.parse(new File("./src/contact.xml"),new MyDefaultHandler());
        } catch (ParserConfigurationException | SAXException e) {
            throw new RuntimeException(e);
        }
    }
}
  • MyDefaultHandler.java@H_403_17@
package com.jpzhutech.sax;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
/** * SAX的处理程序,处理逻辑都在这个类中写 */
import org.xml.sax.helpers.DefaultHandler;

public class MyDefaultHandler extends DefaultHandler {

    @Override
    public void startDocument() throws SAXException {
        System.out.println("调用startDocument方法");
    }


    @Override
    public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException {   //qName:开始标签标签名 attributes:所有的属性都在该对象中
        System.out.println("开始标签:"+qName);

        //获取开始标签中的属性
        for(int i = 0 ; i < attributes.getLength();i++){
            String attributeName = attributes.getQName(i);
            String value = attributes.getValue(attributeName);
            System.out.println(attributeName + "=" + value);

        }
    }

    @Override
    public void endElement(String uri,String qName)
            throws SAXException {  //qName:结束标签
        System.out.println("结束标签"+qName);
    }

    @Override
    public void characters(char[] ch,int start,int length)
            throws SAXException {  //ch:表示已经读完的所有文本内容 start:当前文本内容的开始位置 length:表示当前文本内容的长度
        String string = new String(ch,start,length);
        System.out.println("文本内容"+string);
    }

    @Override
    public void endDocument() throws SAXException {
        System.out.println("结束文档");
    }

}
  • contact.xml@H_403_17@
<?xml version="1.0" encoding="utf-8" ?>
<contactlist>
    <contact id="001" name="eric">
        <name>张三</name>
        <telephone>15338607192</telephone>
        <age>20</age>
        <email>zhangsan@qq.com</email>
        <qq>13101900</qq>
    </contact>
     <contact id="002">
        <name>李四</name>
        <telephone>15338607193</telephone>
        <age>20</age>
        <email>lisi@qq.com</email>
        <qq>13101901</qq>
    </contact>
    <contact id="003">
        <name>王五</name>
        <telephone>15338607194</telephone>
        <age>21</age>
        <email>wangwu@qq.com</email>
        <qq>13101902</qq>
    </contact>
    <ABC>
    </ABC>
</contactlist>
原文链接:https://www.f2er.com/xml/295115.html

猜你在找的XML相关文章