XML 及其解析

来源:互联网 发布:网页设计软件 编辑:程序博客网 时间:2024/05/23 18:19

一  XML 介绍

     XML(Extensible Markup Language), 可扩展语言。

     XML 的设计是为了传输和存储数据,焦点是数据的内容。

    XML 的结构如下:

    1) XML 声明

        XML 总是以一个XML声明来开始,位于文档的第一行。

        它指明了XML 的版本和编码方式。

        如以下, 版本号为1.0, 编码方式为utf-8。

      <?xml version="1.0" encoding="utf-8"?>

    2)  元素

       XML 必须有一个根元素。比如 android 布局文件的根元素就是布局方式。

       XML 的元素有以下4种:

       1)  空元素

             如:<strdent  />

       2) 带属性的空元素

           如: <student name:"zhang" age="20"/>

       3)带有内容的元素

           如 :

          <student >

                          <name>zhang</name>

                          <age>20</age>

         </student>

        4) 带有内容和属性的元素

            <student 

              name="zhang">

              <age>20</age>

            </student>

     3 注释

         XML 的注释方式如下:

         <!-- This is a comment -->

二  XML 的解析 

       这里主要介绍一下SAX 方式解析 XML。

       SAX主要方法位于org.xml.sax包。

       事件源是XMLReader,它用parser()方法来解析XML 文档。

      事件处理器是org.xml.sax包中的ContentHandler,DTDHandler,ErrorHandler,EntityResolver。

  为了方便程序的编写。 SDK 提供了DefaultHandler 继承了以上的事件处理器。

     

      1. 获得XMLReader, 并解析文件

           

        SAXParserFactory spfactory = SAXParserFactory.newInstance();        SAXParser saxParser = spfactory.newSAXParser();        XMLReader xmlReader = saxParser.getXMLReader();        xmlReader.setContentHandler(new DefaultHandler);        InputSource source = new InputSource(new StringReader(XMLFILE));        xmlReader.parse(source);


   2.    实现DefaultHandler

   要实现XML 的解析, 必须重写DefaultHandler 

public class DefaultHandler    implements EntityResolver, DTDHandler, ContentHandler, ErrorHandler{    //开始解析文档    public void startDocument ()    throws SAXException    {    // no op    }    //文档解析结束    public void endDocument ()    throws SAXException    {    // no op    }    //开始解析节点    public void startElement (String uri, String localName,                  String qName, Attributes attributes)    throws SAXException    {    // no op    }    //结束解析节点     public void endElement (String uri, String localName, String qName)    throws SAXException    {    // no op    }    //保存节点内容,ch[] 为节点内容,start 为节点开始,length 为节点内容长度    public void characters (char ch[], int start, int length)    throws SAXException    {    // no op    }}



XML 的解析通常需要根据XML 预先定义的元素结构建立  元素类。

 在 characters (charch[], intstart, intlength)  中保存到元素类。