• SAX解析详解


    (1)什么是SAX解析

        SAX解析器是对XML文档解析会从XML文档开始位置起进行解析,同时根据已经定义好的事件处理器,来决定当前所解析的部分(元素/属性或是元素内容)是否有必要记录并存储。

    (2)示例部分

        SAXDemo.java

    View Code
    package TestFor0330;
    
    import java.io.File;
    
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    
    import org.xml.sax.SAXException;
    
    public class SaxDemo {
    
        public static void main(String[] args) {
                    //创建解析的XML文档对象,其保持在根目录下
            File file=new File("article.xml");
            //创建一个SAXParserFactory对象,通过单例形式
            SAXParserFactory factory=SAXParserFactory.newInstance();
            
            try {
                            //创建SAXParser对象
                SAXParser parser=factory.newSAXParser();
                            //解析文件,定义解析时代事件处理
                parser.parse(file, new MySaxHandler());
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    
    }
                

        MySaxHandler.java

    View Code
    package TestFor0330;
    
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    
    public class MySaxHandler extends DefaultHandler {
        //格式化
        static DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //内容        
        private String content;
        
        //事件发生时元素中的字符
        @Override
        public void characters(char[]ch,int start,int lenght)throws SAXException{
            content=new String(ch,start,lenght);
        }
        
        //当解析到元素的结束标签时触发
        @Override
        public void endElement(String uri,String localName,String qName)throws SAXException{
            if("title".equals(qName)){
                System.out.println("标题:"+content);
            }else if("author".equals(qName)){
                System.out.println("作者:"+content);
            }else if("email".equals(qName)){
                System.out.println("电子邮箱:"+content);
            }else if("body".equals(qName)){
                System.out.println("内容:"+content);
            }else if("date".equals(qName)){
                System.out.println("时间:"+content);
            }
        }
        //当解析到元素的开始标签时触发
        @Override
        public void startElement
                (String uri,String localName,String qName,Attributes attributes)
                                            throws SAXException{
            if("article".equals(qName)){
                System.out.println("\r\n找到一篇文章,所属分类:"+attributes.getValue("category")+".");
            }
        }
        
        
    
    }

        article.xml

    View Code
    <articles>
        <article category="xml">
            <title> XML 概述</title>
            <author>janet</author>
            <email>winfu@163.com</email>
            <date>20080801</date>
        </article >
            
        <article category="java">
        <title> Java 基本语法</title>
            <author>janet</author>
            <email>winfu@163.com</email>
            <date>20080801</date>
        </article>
    </articles>

    运行结果:

    找到一篇文章,所属分类:xml.
    标题: XML 概述
    作者:janet
    电子邮箱:winfu@163.com
    时间:20080801

    找到一篇文章,所属分类:java.
    标题: Java 基本语法
    作者:janet
    电子邮箱:winfu@163.com
    时间:20080801

    (3)代码分析

         首先要通过三个步骤解析XML文件  

        SAXParserFactory factory=SAXParserFactory.newInstance();
        SAXParser parser=factory.newSAXParser();
        parser.parse(file, new MySaxHandler());

        在解析XML数据时,要创建一个解析的监听器对象,这里通过继承DefaultHandle.

        

  • 相关阅读:
    造数据
    自定义注解
    利用线程池,同步线程实现并发
    ThreadPoolExecutor 线程池
    velocity 模板
    [python] 解析xml文件
    url 中需要转义的字符
    Appium 坑
    TestNG 101
    【python】print · sys.stdout · sys.stderr
  • 原文地址:https://www.cnblogs.com/DeepBlues/p/2991974.html
Copyright © 2020-2023  润新知