zoukankan      html  css  js  c++  java
  • XML解析之SAX解析技术案例

    Java代码:

    package com.xushouwei.xml;

     

    import java.io.File;

    import java.io.IOException;

    import java.text.DateFormat;

    import java.text.SimpleDateFormat;

     

    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;

     

    /**

     * SAX解析XML数据

     * 原理:

     * SAX解析器对XML文档解析会从XML文档开始位置起进行解析,同事根据已经定义好的事件处理器,来决定当前所解析的部分(元素、属性、或是元素内容)是否有必要记录并保存。相对于DOM解析,他的有点事占用内存小查找速度更快点。

     * @author 徐守威

     *

     */

    public class SAXParseDemo {

      

       public static void main(String[] args) {

          //创建解析XML文档对象,其保存在E盘的根目录下的article.xml

          File xmlFile=new File("E:\article.xml");

          //创建一个SAXParserFactory对象,通过单例模式创建,SAXParserFactory对象相当于是SAXParser解析器的创建工程,通过SAXParserFactory.newInstance()方法创建SAXParserFactory对象

          SAXParserFactory factory=SAXParserFactory.newInstance();

          try {

             //从SAXParserFactory得到SAXParser对象

             SAXParser parser=factory.newSAXParser();

             //解析文件内容

             try {

                parser.parse(xmlFile, new MySaxHandler());

             } catch (IOException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

             }

          } catch (ParserConfigurationException e) {

             // TODO Auto-generated catch block

             e.printStackTrace();

          } catch (SAXException e) {

             // TODO Auto-generated catch block

             e.printStackTrace();

          }

         

       }

     

    }

    //因为SAX解析是事件驱动的,因此我们这里定义一个时间的监听器对象,MySaxHandler,该类可以继承DefaultHandler类,这类似Swing中的事件监听器,这里要了解一下

    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 length)

             throws SAXException {

          // TODO Auto-generated method stub

          content=new String(ch, start, length);

       }

       //当解析到元素的结束标签时触发

       @Override

       public void endElement(String uri, String localName, String qName)

             throws SAXException {

          // TODO Auto-generated method stub

          //如果是标题

          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 {

          // TODO Auto-generated method stub

          if("article".equals(qName))

          {

             //如果节点名称为article,则输出article元素属性category

             System.out.println(" 找到一篇文章,所属分类:"+attributes.getValue("category")+".");

          }

       }

    }

     xml代码:

    <?xml version="1.0" encoding="GB2312"?>
    <articles>
    <article category="Android">
    <title>Android学习之路</title>
    <author>徐守威</author>
    <email>shouweixu@foxmail.com</email>
    <date>2016-05-20</date>
    </article>
    <article category="JavaWeb">
    <title>JavaWeb学习笔记</title>
    <author>Jasxu</author>
    <email>shouweixu@qq.com</email>
    <date>2016-05-21</date>
    </article>
    </articles>

  • 相关阅读:
    [转]谈谈技术原则,技术学习方法,代码阅读及其它
    ImageMagick 详细安装使用 linux (jmagick)
    Sql Server中的表访问方式Table Scan, Index Scan, Index Seek
    在SQL Server中创建用户角色及授权
    LINQ to SQL:创建你的第一个程序
    Sql Server Statement Output
    内置系统账户:Local system/Network service/Local Service 区别
    SQL Server的备份
    SQL Server 使用Agent自动备份数据库
    将sql server 2000的备份文件导入到sql server 2012中
  • 原文地址:https://www.cnblogs.com/Jasxu/p/sax_parser.html
Copyright © 2011-2022 走看看