`
suuu
  • 浏览: 16944 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Android学习笔记(9)XML文件解析

 
阅读更多

XML(可扩展标记语言)

通常有两种方式对XML文件今夕解析,分别是SAXDOM(文档对象模型)

 

DOM方式

 原理首先要把XML文档全部装载到内存,然后把XML文档解析成一棵树,有根节点、子节点、叶节点。在这棵树上进行相关的操作,比如添加、删除节点等。

 

 优点: 操作起来简单方便

 缺点:如果XML文档比较大,性能上就会存在问题。

 

一、SAX概念

SAX-Simple API for XML

SAX既是指一种接口,也是指一个软件包。作为接口,SAX是事件驱动型XML解析的一个标准接口。

 

 优点:  逐行扫描XML文档,一边扫描一边解析,可以随时停止解析。  

 缺点:  对XML进行操作比较复杂。

二、SAX基本原理

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

 

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

   1、在文档的开始和结束时触发文档处理事件。 
  2、在文档内每一XML元素接受解析的前后触发元素事件。 
  3、任何元数据通常都由单独的事件交付。 
  4、在处理文档的DTD或Schema时产生DTD或Schema事件。 
  5、产生错误事件用来通知主机应用程序解析错误。

三、SAX常用接口

ContentHandler接口

  ContentHandler是Java类包中一个特殊的SAX接口,位于org.xml.sax包中。该接口封装了一些对事件处理的方法,当XML解析器开始解析XML输入文档时,它会遇到某些特殊的事件,比如文档的开头和结束、元素开头和结束、以及元素中的字符数据等事件。当遇到这些事件时,XML解析器会调用ContentHandler接口中相应的方法来响应该事件。


  ContentHandler接口的方法有以下几种:

  void startDocument() 
  void endDocument() 
  void startElement(String uri, String localName, String qName, Attributes atts) 
  void endElement(String uri, String localName, String qName) 
  void characters(char[ ] ch, int start, int length) 

 

  DTDHandler接口

  DTDHandler用于接收基本的DTD相关事件的通知。该接口位于org.xml.sax包中。此接口仅包括DTD事件的注释和未解析的实体声明部分。SAX解析器可按任何顺序报告这些事件,而不管声明注释和未解析实体时所采用的顺序;但是,必须在文档处理程序的startDocument()事件之后,在第一个startElement()事件之前报告所有的DTD事件。


  DTDHandler接口包括以下两个方法

void startDocumevoid notationDecl(String name, String publicId, String systemId) nt() 
  void unparsedEntityDecl(String name, String publicId, String systemId, String notationName)

 

  EntityResolver接口

  EntityResolver接口是用于解析实体的基本接口,该接口位于org.xml.sax包中。


  该接口只有一个方法,如下:

public InputSource resolveEntity(String publicId, String systemId) 

 

 
  解析器将在打开任何外部实体前调用此方法。此类实体包括在DTD内引用的外部DTD子集和外部参数实体和在文档元素内引用的外部通用实体等。如果SAX应用程序需要实现自定义处理外部实体,则必须实现此接口。

 

  ErrorHandler接口

  ErrorHandler接口是SAX错误处理程序的基本接口。如果SAX应用程序需要实现自定义的错误处理,则它必须实现此接口,然后解析器将通过此接口报告所有的错误和警告。


  该接口的方法如下:

      void error(SAXParseException exception) 
  void fatalError(SAXParseException exception) 
  void warning(SAXParseException exception) 

 

  创建SAX解析器

  (1)用系统默认值来创建一个XMLReader(解析器):

XMLReader reader = XMLReaderFactory.createXMLReader(); 

 
  (2)从给定的类名称来创建一个XMLReader :

XMLReader reader = XMLReaderFactory.createXMLReader( 
  "org.apache.xerces.parsers.SAXParser"); 

 
  (3)使用javax.xml.parsers包中的SAXParserFactory类和SAXParser类创建:

      SAXParserFactory spFactory = SAXParserFactory.newInstance(); 
  SAXParser sParser = spFactory.newSAXParser(); 

 

  DefaultHandler类

  DefaultHandler类是SAX2事件处理程序的默认基类。它实现了EntityResolver、DTDHandler、ContentHandler和ErrorHandler这四个接口。包含这四个接口的所有方法,所以我们在编写事件处理程序时,可以不用直接实现这四个接口,而继承该类,然后重写我们需要的方法。

如下:

import org.xml.sax.*; 
  import org.xml.sax.helpers.DefaultHandler; 
  public class TestDefaultHandler extends DefaultHandler{ 
  public void startDocument() throws SAXException{ 
  System.out.println("开始解析!"); } 
  public void endDocument() throws SAXException{ 
  System.out.println("解析完成!"); } 
  public void startElement(String uri, String localName, String qName, 
  Attributes atts) throws SAXException { 
  System.out.println("元素名:"+qName); 
  } 
  public void endElement(String uri, String localName, String qName) 
  throws SAXException{ 
  System.out.println("对"+qName+"的解析完成!"); 
  } 
  } 

 

    XMLReader接口  


  XMLReader接口是使用回调读取XML文档的接口。XMLReader是XML解析器的SAX2驱动程序必须实现的接口。此接口允许应用程序设置和查询解析器中的功能和属性,注册文档的事件处理程序,以及对文档的解析。如下

 

  import org.xml.sax.*; 
  import org.xml.sax.helpers.*; 
  public class TestXMLReader{ 
  public TestXMLReader(){ 
  try{ 
  XMLReader reader = XMLReaderFactory.createXMLReader( 
  "org.apache.xerces.parsers.SAXParser"); 
  System.out.println("创建解析器成功!"); 
  //MyContentHandler是实现了ContentHandler接口的类 
  reader.setContentHandler(new MyContentHandler()); 
  reader.setDTDHandler(new MyDTDHandler()); 
  //对test.xml进行解析 
  reader.parse("test.xml"); 
  System.out.println("解析完成!"); 
  }catch(SAXException e){e.printStackTrace();} 
  } 
  } 
 

 

  SAX (Sampling and Analytical Quality Control Scheme),采样分析全过程质量控制。是近些年发展起来的另一种全程质量控制方法。SAX要求采集平行样品,并对每个样品进行平行分析,并在最后用方差分析这一统计手段把采样和分析过程的偶然误差分别以方差形式定量表示。这一全程质量控制方法首先被用于地球化学研究中分析数据中,后来广泛于植物、土壤环境分析质量控制中 

四、SAX解析 

 

分享到:
评论

相关推荐

    Android学习笔记之AndroidManifest.xml文件解析

    Android学习笔记之AndroidManifest.xml文件解析

    android学习笔记1--SAX解析XML

    ### Android学习笔记1—SAX解析XML #### SAX解析XML概览 在Android开发中,XML文件被广泛用于布局设计、资源定义等场景。而为了处理这些XML文件,开发者需要了解不同的XML解析技术,其中SAX(Simple API for XML)...

    学习笔记之AndroidManifest.xml文件解析.docx

    AndroidManifest.xml 文件解析 AndroidManifest.xml 文件是每个 Android 程序中必须的文件,位于整个项目的根目录,描述了 package 中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的...

    Android基础学习笔记

    Android基础学习笔记主要涵盖了一系列关于Android开发的基本概念和关键组件,以下是这些知识点的详细解析: 1. **Activity**: 是Android应用程序的基本单元,它代表用户在屏幕上看到的一个界面。每个Activity都必须...

    android 学习笔记(全全整理)

    Android学习笔记全全整理,是针对想要深入理解并掌握Android开发技术的学习者们的一份宝贵资源。这份笔记涵盖了从基础到高级的多个方面,旨在帮助读者建立起完整的Android知识体系。以下将详细介绍其中可能包含的...

    Android学习笔记(5-13)

    这篇Android学习笔记主要涵盖了从第五章到第十三章的内容,是Android开发者或对Android系统感兴趣的初学者的重要参考资料。笔记详细解读了Android应用开发的核心概念和技术,旨在帮助读者深入理解并掌握Android开发...

    MONO FOR ANDROID学习笔记全套

    【Mono for Android学习笔记全套】是一份详尽的资源,旨在帮助开发者掌握使用Mono和C#进行Android应用开发的技术。Mono是.NET框架的一个开源实现,它使得C#开发者能够在多种平台上,包括Android,编写和运行应用程序...

    Android自学笔记-9-Pull方式处理XML

    Pull解析器是Android提供的轻量级解析XML的方式,它不需要像DOM解析那样一次性加载整个XML文档到内存中,而是通过事件驱动的方式,按需读取XML节点,降低了内存消耗,适合处理大型XML文件。 三、PullParser的工作...

    android学习笔记最新版(1-4)

    《Android学习笔记最新版(1-4)》是一份针对初学者精心编撰的教程,旨在帮助新手快速掌握Android开发的基础知识。这份笔记涵盖了从环境搭建到应用开发的全过程,内容丰富,深入浅出,是Android学习者的理想参考资料...

    android 很好的学习笔记

    【Android学习笔记详解】 在移动应用开发领域,Android操作系统占据着重要的地位,为开发者提供了丰富的平台和无限的可能性。"Android很好的学习笔记"是一份专为初学者设计的资源,旨在帮助那些想要踏入Android开发...

    Android+学习笔记

    ### Android学习笔记知识点详解 #### 一、简介与背景 Android作为全球最受欢迎的移动操作系统之一,自2007年谷歌发布以来,迅速占领市场并持续引领移动技术的发展。随着移动互联网的兴起和发展,Android应用开发...

    Android_学习笔记

    ### Android学习笔记——从HelloWorld开始 #### 一、Google的Android SDK介绍 自从Google发布了Android SDK以来,这款开源移动操作系统迅速吸引了众多开发者的关注。Android SDK为开发者提供了丰富的工具和API,...

    android 学习笔记整理

    在Android学习过程中,掌握基础知识是至关重要的。这份"android 学习笔记整理"包含了作者在学习Android时积累的详尽资料,旨在为初学者提供一个系统化的学习路径和参考资料。 首先,Android是一种开源的操作系统,...

    android学习笔记.zip

    Android学习笔记是一个专门为初学者和自学者准备的资源包,旨在帮助他们系统地掌握Android开发的基础知识。这个压缩包可能包含一系列的文档、教程、代码示例和其他学习材料,以全面介绍Android应用开发的各个方面。 ...

    Android PreferenceActivity 学习笔记

    这篇学习笔记将深入探讨PreferenceActivity的使用方法、功能以及与源码相关的知识。 首先,PreferenceActivity是Android SDK提供的一种特殊类型的Activity,它允许开发者快速构建具有可配置选项的界面,类似于系统...

    android学习笔记1

    "Android学习笔记1"这个压缩包文件很可能是开发者在实践中积累的经验和代码示例的集合,对于初学者和有经验的开发者来说,都是宝贵的资源。这里,我们将深入探讨Android开发的一些关键概念和技术。 首先,Android是...

    Dom4j学习教程+API+xml实用大全+xml学习笔记+htc

    标题"Dom4j学习教程+API+xml实用大全+xml学习笔记+htc"提及了几个关键主题,包括Dom4j的学习资源、API文档,以及关于XML的实用指南和学习笔记,还提到了一个名为"htc"的文件,可能是关于HTC设备或技术的文档。...

Global site tag (gtag.js) - Google Analytics