zoukankan      html  css  js  c++  java
  • SAX解析XML

    sax解析特点:1、逐行读取

                 2、事件处理-- 方法

                 3、解析器调用相应的事件

                     4、只能读取文件

     

    DefaultHandler 可以触发5个事件

            *startDocument()   开始文档

            *startElement()    开始元素

            *characters()      文本

            *endElement()      结束元素

            *endDocument()     结束文档

     

    在startElement

     

        /**    
         * 如果xml文件使用了schema约束 <xs:element>
         *      * uri:schema -- targetNameSpace   
         *   * localName--element
         *   * qName---xs:element
         * 如果不使用
         *   * uri:null
         *   * localName:null
         *   * qName : element
         *   
         * Attributes:当前元素的所有的属性的集合
         */

     

    1 //获得解析工厂实例
    2         SAXParserFactory factory=SAXParserFactory.newInstance();
    3         //获得解析器
    4         SAXParser parser=factory.newSAXParser();
    5         //解析xml
    6         DefaultHandler dh=new MyDefaultHandler();  
    7          
    8         parser.parse("books.xml", dh);

     

     Demo

     1 public void SaxDemo() throws Exception
     2     {
     3         SAXParser parser= SAXParserFactory.newInstance().newSAXParser();
     4         parser.parse(Demo.class.getClassLoader().getResourceAsStream("users.xml"), new DefaultHandler(){
     5             private boolean nameOrAge=false;
     6             @Override
     7             public void startElement(String uri, String localName,
     8                     String qName, Attributes attributes) throws SAXException {
     9                 if(qName.equals("user"))
    10                 {
    11                     System.err.println(attributes.getValue("id"));
    12                 }
    13                 else if(qName.equals("name") || qName.equals("age")){
    14                     nameOrAge=true;
    15                 }
    16             }
    17             
    18             @Override
    19             public void endElement(String uri, String localName, String qName)
    20                     throws SAXException {
    21                 if(qName.equals("name")|| qName.equals("age"))
    22                 {
    23                     nameOrAge=false;
    24                 }
    25             }
    26             
    27             @Override
    28             public void characters(char[] ch, int start, int length)
    29                     throws SAXException {
    30                 if(nameOrAge)
    31                 {
    32                     String value=new String(ch,start,length);
    33                     System.err.println(value);
    34                 }
    35             }
    36             
    37         });
    38     }

     

     

  • 相关阅读:
    Hadoop
    Mapreduce
    ssh原理
    HDFS
    Centos
    创建jira插件
    新型的领导者是一名推动者,而不是一名发号施令者
    上善若水,虚怀若谷
    GoAhead 嵌入式web
    Eclipse基金会
  • 原文地址:https://www.cnblogs.com/liuwt365/p/4079274.html
Copyright © 2011-2022 走看看