SAX实现对XML文件的解析

  可扩展标记语言XML(eXtensible Markup Language)是一种简单灵活的文本格式的可扩展标记语言。可扩展即可自定义标记语言。

与HTML相比,XML是被设计为传输和存储数据,其焦点是数据的内容。而HTML是被设计用来显示数据的,侧重在数据的外观。其二,

在语法上,HTML的标记并不是所有的都需要成对出现,不区分大小写;但XML严格要求成对出现,且大小写敏感。

SAX的原理:

  SAX的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档开始与结束、元素开始与结束等等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。

 大多数SAX实现都会产生以下类型的事件:

   1)在文档的开始和结束时触发文档处理事件

   2)在文档内每一XML元素接受解析的前后触发元素事件

   3)任何元素据通常都由单独的事件交付

   4)在处理文档的DTDSchema时产生DTDSchema事件

   5)产生错误事件用来通知主机应用程序解析错误


简单实例:

public class XMLHandler  extends DefaultHandler{

          //DefaultHandler与MouseAdapter作用一样

          //以下方法为选择性实现ContentHandler接口中的5个抽象方法

          @Override

          public void startDocument() throws SAXException{

                     super.startDocment();

                     System.out.println("-------startDocument--------------");

           }

           @Override

            public void endDocument() throws SAXException {

                       super.endDocument();

                       System.out.println("-------endDocument--------------");

            }

            @Override

             public void startElement(String uri, String localName, String qName,

                        Attributes attributes) throws SAXException {

                      //localName是带后缀标记   qName是不带后缀的标记    attributes是标签属性,例如ID

                     super.startElement(uri, localName, qName, attributes);

                     System.out.println("-------startElement--------------");

                      System.out.println("startElement  loaclName="+localName);

                       for(int i=0;i<attributes.getLength();i++){

                                System.out.println(attributes.getLocalName(i)+"="+attributes.getValue(i));

                      }

                } 

              

                @Override

             public void startElement(String uri, String localName, String qName,

                        Attributes attributes) throws SAXException {

                    super.startElement(uri, localName, qName);

                    System.out.println("-------endElement------------LocalName="+localName);

             }

             @Override

              public void characters(char[] ch, int start, int length)throws SAXException{

                             super.characters(ch,start,length);

                              System.out.println("-------characters--------------");

                              //构造字符串

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

                              System.out.println("content="+content);

        }


}

   给定一份文件user.xml

<?xml version="1.0" encoding="UTF-8"?>
<users>
    <user id="1" color="red">
        <name>张三</name>
        <sex>男</sex>
        <address>衡阳</address>
    </user>
    <user id="2">
        <name>李四</name>
        <sex>女</sex>
        <address>长沙</address>
    </user>
</users>


进行解析步骤

1.得到SAX解析工厂类对象

SAXParserFactory  factory=SAXParserFactory.newInstance();

2.获取SAX解析器

SAXParser parser=factory.getXMLReader();

reader.setContentHandler(new XMLHandler());    //xml解析器会调用ContentHandler接口中相应的方法来响应该事件。

reader.parse(new InputSource(new StringReader(resultStr)));   //resultStr是指user.xml文件内容(IO处理为String类型)















  

}

猜你喜欢

转载自blog.csdn.net/zuofanxiu/article/details/48522883