我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android创建与解析XML(三)——详解Sax方式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android创建与解析XML(三)——详解Sax方式

1. Sax概述

SAX是一种占用内存少且解析速度快的解析器,它采用的是事件启动,不需要解析完整个文档,而是按照内容顺序看文档某个部分是否符合xml语法,如果符合就触发相应的事件,所谓的事件就是些回调方法(callback),这些方法 定义在ContentHandler中,下面是其主要方法:

startDocument():当遇到文档的时候就触发这个事件 调用这个方法 可以在其中做些预处理工作,如:申请对象资源

endDocument():当结束文档的时候就触发这个事件 调用这个方法 可以在其中做些善后工作,如:释放申请的对象资源

startElement(String namespaceURI, String localName, String qName, Attributes atts):当遇开始标签的时候就会触发这个方法。

endElement(String uri, String localName, String name):当遇到结束标签时触发这个事件,调用此法可以做些善后工作。

charachers(char [] ch, int start, int length):当遇到xml内容时触发这个方法,用new String(ch,start,length)可以接受内容。

Sax方式创建XML,应用了标准xml构造器 javax.xml.transform.sax.TransformerHandler 事件来创建 XML 文档,需要导入以下内容

javax.xml.transform

javax.xml.transform.sax.SAXTransformerFactory; javax.xml.transform.sax.TransformerHandler; javax.xml.transform.Transformer; javax.xml.transform.TransformerConfigurationException; javax.xml.transform.TransformerFactoryConfigurationError; javax.xml.transform.OutputKeys; javax.xml.transform.stream.StreamResult; javax.xml.transform.sax.SAXTransformerFactory;

javax.xml.parsers

javax.xml.parsers.SAXParser; javax.xml.parsers.SAXParserFactory; javax.xml.parsers.FactoryConfigurationError; javax.xml.parsers.ParserConfigurationException;

org.xml.sax

org.xml.sax.Attributes; org.xml.sax.SAXException; org.xml.sax.helpers.AttributesImpl; org.xml.sax.helpers.DefaultHandler;

Sax 创建和解析 XML 的效果图:

2、Sax 创建 XML

首先,SAXTransformerFactory.newInstance() 创建一个工厂实例 factory

接着,factory.newTransformerHandler() 获取 TransformerHandler 的 handler 对象

然后,通过 handler 事件创建handler.getTransformer()、 handler.setResult(result),以及 startDocument()、startElement、characters、endElement、endDocument()等


 
public String saxCreateXML(){ 
  StringWriter xmlWriter = new StringWriter(); 
  Person []persons = new Person[3];    // 创建节点Person对象 
  persons[0] = new Person(1, "sunboy_2050", "http://blogcsdnnet/sunboy_2050"); 
  persons[1] = new Person(2, "baidu", "http://wwwbaiducom"); 
  persons[2] = new Person(3, "google", "http://wwwgooglecom"); 
  try { 
    SAXTransformerFactory factory = (SAXTransformerFactory)SAXTransformerFactorynewInstance(); 
    TransformerHandler handler = factorynewTransformerHandler(); 
    Transformer transformer = handlergetTransformer();   // 设置xml属性 
    transformersetOutputProperty(OutputKeysINDENT, "yes"); 
    transformersetOutputProperty(OutputKeysENCODING, "utf-8"); 
    transformersetOutputProperty(OutputKeysVERSION, "0"); 
    StreamResult result = new StreamResult(xmlWriter);   // 保存创建的xml 
    handlersetResult(result); 
    handlerstartDocument(); 
    AttributesImpl attr = new AttributesImpl(); 
    attrclear(); 
    attraddAttribute("", "", "author", "", "homer"); 
    attraddAttribute("", "", "date", "", "2012-04-27"); 
    handlerstartElement("", "", "root", attr); 
    int personsLen = personslength; 
    for(int i=0; i<personsLen; i++){ 
      attrclear(); 
      handlerstartElement("", "", "person", attr); 
      attrclear(); 
      handlerstartElement("", "", "id", attr); 
      String id = persons[i]getId() + ""; 
      handlercharacters(idtoCharArray(), 0, idlength()); 
      handlerendElement("", "", "id"); 
      attrclear(); 
      handlerstartElement("", "", "name", attr); 
      String name = persons[i]getName(); 
      handlercharacters(nametoCharArray(), 0, namelength()); 
      handlerendElement("", "", "name"); 
      attrclear(); 
      handlerstartElement("", "", "blog", attr); 
      String blog = persons[i]getBlog(); 
      handlercharacters(blogtoCharArray(), 0, bloglength()); 
      handlerendElement("", "", "blog"); 
      handlerendElement("", "", "person"); 
    } 
    handlerendElement("", "", "root"); 
    handlerendDocument(); 
  } catch (TransformerFactoryConfigurationError e) {   // SAXTransformerFactorynewInstance 
    eprintStackTrace(); 
  } catch (TransformerConfigurationException e) {     // factorynewTransformerHandler 
    eprintStackTrace(); 
  } catch (IllegalArgumentException e) {   // transformersetOutputProperty 
    eprintStackTrace(); 
  } catch (SAXException e) {   // handlerstartDocument 
    eprintStackTrace(); 
  } catch (Exception e) { 
    eprintStackTrace(); 
  } 
  savedXML(fileName, xmlWritertoString()); 
  return xmlWritertoString(); 
} 

运行结果:

3、Sax解析XML
 


   
  public String saxResolveXML(){ 
    StringWriter xmlWriter = new StringWriter(); 
    InputStream is = readXML(fileName); 
    try { 
      SAXParserFactory factory = SAXParserFactorynewInstance(); 
      SAXParser saxParser = factorynewSAXParser(); 
      PersonHandler handler = new PersonHandler();  // person处理Handler 
      saxParserparse(is, handler);          // handler解析xml 
      // 获取解析的xml 
      String xmlHeader = handlergetXMLHeader(); 
      xmlWriterappend(xmlHeader); 
      List<Person> personsList = handlergetPersons(); 
      int personsLen = personsListsize(); 
      for(int i=0; i<personsLen; i++){ 
        xmlWriterappend(personsListget(i)toString())append("\n"); 
      } 
    } catch (FactoryConfigurationError e) {     // SAXParserFactorynewInstance 
      eprintStackTrace(); 
    } catch (ParserConfigurationException e) {   // factorynewSAXParser 
      eprintStackTrace(); 
    } catch (SAXException e) {     // factorynewSAXParser 
      eprintStackTrace(); 
    } catch (IllegalArgumentException e) {   // saxParserparse 
      eprintStackTrace(); 
    } catch (IOException e) {      // saxParserparse 
      eprintStackTrace(); 
    } catch (Exception e) { 
      eprintStackTrace(); 
    } 
    return xmlWritertoString(); 
  } 
   
  private final class PersonHandler extends DefaultHandler{ 
    private List<Person> personsList = null; // 保存person 
    private Person person = null; 
    private StringBuffer xmlHeader;       // 保存xml头部信息 
    private String tag = null;     // xml Element 
     
    public String getXMLHeader(){ 
      return xmlHeadertoString(); 
    } 
     
    public List<Person> getPersons(){ 
      return personsList; 
    } 
    @Override 
    public void startDocument() throws SAXException{ 
      superstartDocument(); 
      personsList = new ArrayList<Person>(); 
      xmlHeader = new StringBuffer(); 
    } 
    @Override 
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException{ 
      superstartElement(uri, localName, qName, attributes); 
      if("root"equals(localName)) { 
        String attrAuthor = attributesgetValue(0); 
        String attrDate = attributesgetValue(1); 
        xmlHeaderappend("root")append("\t\t"); 
        xmlHeaderappend(attrAuthor)append("\t"); 
        xmlHeaderappend(attrDate)append("\n"); 
      } else if("person"equals(localName)) { 
        person = new Person(); 
      }  
      tag = localName; 
    } 
    @Override 
    public void characters(char[] ch, int start, int length) throws SAXException { 
      supercharacters(ch, start, length); 
      if (null != tag) { 
        String value = new String(ch, start, length); 
        Systemoutprintln("value = " + value); 
        if ("id"equals(tag)) { 
          personsetId(new Integer(value)); 
        } else if ("name"equals(tag)) { 
          personsetName(value); 
        } else if ("blog"equals(tag)) { 
          personsetBlog(value); 
        } 
      } 
    } 
    @Override 
    public void endElement(String uri, String localName, String qName) throws SAXException { 
      if("person"equals(qName)) { 
        personsListadd(person); 
        person = null; 
      } 
      tag = null; 
      superendElement(uri, localName, qName); 
    } 
    @Override 
    public void endDocument() throws SAXException{ 
//     personsList = null; 
      superendDocument(); 
    } 
  } 

运行结果:

4、Person类

请参见前文Android 创建与解析XML(二)—— Dom方式 【4、Person类】

您可能感兴趣的文章:Android中使用sax解析xml文件的方法Android编程解析XML方法详解(SAX,DOM与PULL)Android解析XML的三种方式SAX、Pull、Dom详解android使用SAX解析XML文件Android编程使用sax解析xml数据的方法详解详解Android之解析XML文件三种方式(DOM,PULL,SAX)Android利用SAX对XML进行增删改查操作详解


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android创建与解析XML(三)——详解Sax方式

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android创建与解析XML(三)——详解Sax方式

1. Sax概述 SAX是一种占用内存少且解析速度快的解析器,它采用的是事件启动,不需要解析完整个文档,而是按照内容顺序看文档某个部分是否符合xml语法,如果符合就触发相应的事件,所谓的事件就是些回调方法(callback),这些方法 定义
2022-06-06

详解Android之解析XML文件三种方式(DOM,PULL,SAX)

1.xml文件代码 <%@ page language="java" contentType="text/xml; charset=UTF-8" pageEncodi
2022-06-06

Android解析XML的三种方式SAX、Pull、Dom

在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX、Pull、Dom解析方式。最近做了一个android版的CSDN阅读器,用到了其中的两种(sax,pull),本文对android解析xml的这三种
2022-06-06

Android 创建与解析XML(五)——详解Dom4j方式

1、Dom4j概述 dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using t
2022-06-06

Android创建与解析XML(二)——详解Dom方式

1. Dom概述 Dom方式创建XML,应用了标准xml构造器 javax.xml.parsers.DocumentBuilder 来创建 XML 文档,需要导入以下内容javax.xml.parsers javax.xml.parsers
2022-06-06

Android 创建与解析XML(四)——详解Pull方式

1、Pull概述 Android系统中和创建XML相关的包为org.xmlpull.v1,在这个包中不仅提供了用于创建XML的 XmlSerializer,还提供了用来解析XML的Pull方式解析器 XmlPullParser XmlSe
2022-06-06

Android编程解析XML方法详解(SAX,DOM与PULL)

本文实例讲述了Android编程解析XML方法。分享给大家供大家参考,具体如下: XML在各种开发中都广泛应用,Android也不例外。作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能。今天就由我向大家介绍一
2022-06-06

详解android使用SAX解析XML文件

解析XML的方式有很多种,大家比较熟悉的可能就是DOM解析。 DOM(文件对象模型)解析:解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以根据DOM接口来操作这个树结构了。 优点:整个文档读入内存,方便操作:支持修改、删除和
2022-06-06

Android编程使用sax解析xml数据的方法详解

本文实例讲述了Android编程使用sax解析xml数据的方法。分享给大家供大家参考,具体如下:随着技术的发展,现在的web已经和以前不同了。web已经逐渐像移动的方向倾斜,作为程序员的确应该拓展一下自己的知识层面。学习各方面的知识,今天就
2023-05-30

Android XML数据的三种解析方式

本篇文章包含以下内容: XML数据的Dom解析 XML数据的Sax解析 XML数据的Pull解析 Activity中使用三种解析 Sax解析与Pull解析区别三种解析方式的步骤: 1.在As
2022-06-06

Android中使用sax解析xml文件的方法

SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备。 SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML 语
2022-06-06

Android编程实现XML解析与保存的三种方法详解

本文实例讲述了Android编程实现XML解析与保存的三种方法。分享给大家供大家参考,具体如下:简介在Android开发中,关于XML解析有三种方式,分别是:1. SAX 基于事件的解析器,解析速度快,占用内存少。非常适合在Android移
2023-05-30

Android基于Pull方式解析xml的方法详解

本文实例讲述了Android基于Pull方式解析xml的方法。分享给大家供大家参考,具体如下: Pull解析和Sax解析很相似,都是轻量级的解析,在Android的内核中已经嵌入了Pull,所以我们不需要再添加第三方jar包来支持Pull。
2022-06-06

详解Android中解析XML的方法

XML在各种开发中都广泛应用,Android也不例外。作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能。今天就由我向大家介绍一下在Android平台下几种常见的XML解析和创建的方法。在Android中,常见
2022-06-06

Python通过DOM和SAX方式解析XML的应用实例分享

XML.DOM 需求 有一个表,里面数据量比较大,每天一更新,其字段可以通过xml配置文件进行配置,即,可能每次建表的字段不一样。 上游跑时会根据配置从源文件中提取,到入库这一步需要根据配置进行建表。 解决 写了一个简单的xml,配置需要字
2022-06-04

Android平台基于Pull方式对XML文件解析与写入方法详解

本文详细讲述了Android平台基于Pull方式对XML文件解析与写入方法。分享给大家供大家参考,具体如下: XML技术在跨平台的情况下的数据交互中得到了广泛的应用,假如我们需要开发一个Android应用程序,需要同服务器端进行数据交互,通
2022-06-06

详解Android中Fragment的两种创建方式

fragment是Activity中用户界面的一个行为或者是一部分。你可以在一个单独的Activity上把多个Fragment组合成为一个多区域的UI,并且可以在多个Activity中再使用。你可以认为fragment是activity的一
2022-06-06

Android中创建子线程的方式详解

这篇文章主要介绍了几种Android中创建子线程的方法,文中有详细的代码示例供参考,对学习或工作有一定的帮助,需要的小伙伴可以参考一下
2023-05-18

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录