XML 及其解析

一  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 (char ch[], int start, int length)  中保存到元素类。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值