zoukankan      html  css  js  c++  java
  • 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.

        

  • 相关阅读:
    PHP调用WCF提供的方法
    关于git报 warning: LF will be replaced by CRLF in README.md.的警告的解决办法
    vue中引入mui报Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them的错误
    微信小程序报Cannot read property 'setData' of undefined的错误
    Vue那些事儿之用visual stuido code编写vue报的错误Elements in iteration expect to have 'v-bind:key' directives.
    关于xampp中无法启动mysql,Attempting to start MySQL service...的解决办法!!
    PHP的环境搭建
    新手PHP连接MySQL数据库出问题(Warning: mysqli_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES))
    手机号码、获得当前时间,下拉框,填写限制
    团队作业(五):冲刺总结
  • 原文地址:https://www.cnblogs.com/DeepBlues/p/2991974.html
Copyright © 2011-2022 走看看