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

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

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

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

 1、Pull概述

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

XmlSerializer没有像XmlPullParser那样提取XML事件,而是把它们推出到数据流OutputStream或Writer中。

XmlSerializer提供了很直观的API,即使用startDocument开始文档,endDocument结束文档,startTag开始元素,endTag结束元素,text添加文本等。

Pull方式创建XML,应用了标准xml构造器 org.xmlpull.v1.XmlSerializer来创建 XML ,org.xmlpull.v1.XmlPullParser来解析XML,需要导入以下内容

org.xmlpull.v1

org.xmlpull.v1.XmlPullParser; org.xmlpull.v1.XmlPullParserException; org.xmlpull.v1.XmlPullParserFactory; org.xmlpull.v1.XmlSerializer;

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

2、Pull 创建 XML

pull方式,创建xml是通过 XmlSerializer 类实现

首先,通过XmlSerializer得到创建xml的实例 xmlSerializer

接着,通过 xmlSerializer 设置输出 xmlSerializer.setOutput,xmlSerializer.startDocument("utf-8", null)设置xml属性等

然后,通过 xmlSerializer 创建 startDocument、startTag、text、endTag、endDocument等


  
  public String pullXMLCreate(){ 
    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 { 
//     // 方式一:使用Android提供的实用工具类androidutilXml 
//     XmlSerializer xmlSerializer = XmlnewSerializer();    
      // 方式二:使用工厂类XmlPullParserFactory的方式 
      XmlPullParserFactory factory = XmlPullParserFactorynewInstance(); 
      XmlSerializer xmlSerializer = factorynewSerializer(); 
      xmlSerializersetOutput(xmlWriter);       // 保存创建的xml 
      xmlSerializersetFeature("http://xmlpullorg/v1/doc/featureshtml#indent-output", true); 
//     xmlSerializersetProperty("http://xmlpullorg/v1/doc/propertieshtml#serializer-indentation", " ");     // 设置属性 
//     xmlSerializersetProperty("http://xmlpullorg/v1/doc/propertieshtml#serializer-line-separator", "\n"); 
      xmlSerializerstartDocument("utf-8", null);   // <?xml version='0' encoding='UTF-8' standalone='yes' ?>  
      xmlSerializerstartTag("", "root"); 
      xmlSerializerattribute("", "author", "homer"); 
      xmlSerializerattribute("", "date", "2012-04-28"); 
      int personsLen = personslength; 
      for(int i=0; i<personsLen; i++) { 
        xmlSerializerstartTag("", "person");    // 创建person节点 
        xmlSerializerstartTag("", "id"); 
        xmlSerializertext(persons[i]getId()+""); 
        xmlSerializerendTag("", "id"); 
        xmlSerializerstartTag("", "name"); 
        xmlSerializertext(persons[i]getName()); 
        xmlSerializerendTag("", "name"); 
        xmlSerializerstartTag("", "blog"); 
        xmlSerializertext(persons[i]getBlog()); 
        xmlSerializerendTag("", "blog"); 
        xmlSerializerendTag("", "person"); 
      } 
      xmlSerializerendTag("", "root"); 
      xmlSerializerendDocument(); 
    } catch (XmlPullParserException e) {    // XmlPullParserFactorynewInstance 
      eprintStackTrace(); 
    } catch (IllegalArgumentException e) {   // xmlSerializersetOutput 
      eprintStackTrace(); 
    } catch (IllegalStateException e) {     // xmlSerializersetOutput 
      eprintStackTrace(); 
    } catch (IOException e) {    // xmlSerializersetOutput 
      eprintStackTrace(); 
    } catch (Exception e) { 
      eprintStackTrace(); 
    } 
    savedXML(fileName, xmlWritertoString()); 
    return xmlWritertoString(); 
  } 

运行结果:

3、Pull 解析 XML

pull方式,解析xml是通过 XmlPullParser 类实现

首先,通过XmlPullParser得到解析xml的实例 xpp

接着,通过 xpp设置输入 xpp.setInput(is, "utf-8"),声明定义保存xml信息的数据结构(如:Person数组)

然后,通过 xpp 解析 START_DOCUMENT、START_TAG、TEXT、END_TAG、END_DOCUMENT等
  


  
  public String pullXMLResolve(){ 
    StringWriter xmlWriter = new StringWriter(); 
    InputStream is = readXML(fileName); 
    try { 
//     // 方式一:使用Android提供的实用工具类androidutilXml 
//     XmlPullParser xpp = XmlnewPullParser(); 
      // 方式二:使用工厂类XmlPullParserFactory的方式 
      XmlPullParserFactory factory = XmlPullParserFactorynewInstance(); 
      XmlPullParser xpp = factorynewPullParser(); 
      xppsetInput(is, "utf-8"); 
      List<Person> personsList = null;   // 保存xml的person节点 
      Person person = null; 
      StringBuffer xmlHeader = null;     // 保存xml头部 
      String ele = null;   // Element flag 
      int eventType = xppgetEventType(); 
      while(XmlPullParserEND_DOCUMENT != eventType) { 
        switch (eventType) { 
        case XmlPullParserSTART_DOCUMENT: 
          personsList = new ArrayList<Person>();    // 初始化persons 
          xmlHeader = new StringBuffer();       // 初始化xmlHeader 
          break; 
        case XmlPullParserSTART_TAG: 
          if("root"equals(xppgetName())) { 
            String attrAuthor = xppgetAttributeValue(0); 
            String attrDate = xppgetAttributeValue(1); 
            xmlHeaderappend("root")append("\t\t"); 
            xmlHeaderappend(attrAuthor)append("\t"); 
            xmlHeaderappend(attrDate)append("\n"); 
          } else if("person"equals(xppgetName())) { 
            person = new Person();     // 创建person实例 
          } else if("id"equals(xppgetName())) { 
            ele = "id"; 
          } else if("name"equals(xppgetName())) { 
            ele = "name"; 
          } else if("blog"equals(xppgetName())) { 
            ele = "blog"; 
          } else { 
            ele = null; 
          } 
          break; 
        case XmlPullParserTEXT: 
          if(null != ele) { 
            if("id"equals(ele)) { 
              personsetId(IntegerparseInt(xppgetText())); 
            } else if("name"equals(ele)) { 
              personsetName(xppgetText()); 
            } else if("blog"equals(ele)) { 
              personsetBlog(xppgetText()); 
            } 
          } 
          break; 
        case XmlPullParserEND_TAG: 
          if("person"equals(xppgetName())){ 
            personsListadd(person); 
            person = null; 
          } 
          ele = null; 
          break; 
        } 
        eventType = xppnext();   // 下一个事件类型 
      } 
      xmlWriterappend(xmlHeader); 
      int personsLen = personsListsize(); 
      for(int i=0; i<personsLen; i++) { 
        xmlWriterappend(personsListget(i)toString()); 
      } 
    } catch (XmlPullParserException e) {    // XmlPullParserFactorynewInstance 
      eprintStackTrace(); 
    } catch (Exception e) { 
      eprintStackTrace(); 
    } 
    return xmlWritertoString();     
  } 

运行结果:

4、Person类

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

您可能感兴趣的文章:详解Android之解析XML文件三种方式(DOM,PULL,SAX)Android创建与解析XML(三)——详解Sax方式详解android使用SAX解析XML文件Android解析XML的三种方式SAX、Pull、DomAndroid编程解析XML方法详解(SAX,DOM与PULL)Android中使用sax解析xml文件的方法Android 创建与解析XML(五)——详解Dom4j方式Android创建与解析XML(二)——详解Dom方式Android XML数据的三种解析方式Android 解析XML 文件的四种方法总结基于Android XML解析与保存的实现Android编程使用sax解析xml数据的方法详解


免责声明:

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

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

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

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

下载Word文档

猜你喜欢

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

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

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

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

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

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

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

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

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

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

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

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

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

Android中怎么使用pull方式解析xml格式文件

这篇文章将为大家详细讲解有关Android中怎么使用pull方式解析xml格式文件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。具体如下:
2023-05-30

实例解析Android中使用Pull解析器解析XML的方法

1.Pull简介 Pull解析器是Android系统内置的的,Pull解析器与SAX解析器类似,他提供了类似的事件,如开始元素和介绍元素的事件,使用parser.next()可以进入下一个元素并触发相应的事件,然后进行相应的处理,当元素开始
2022-06-06

Android中使用PULL方式解析XML文件深入介绍

一、基本介绍 Android中极力推荐xmlpull方式解析xml。 xmlpull不仅可用在Android上同样也适用于javase,但在javase环境中需自己获取xmlpull所依赖的类库,kxml2-2.3.0.jar,xmlpul
2022-06-06

Android 使用Pull方法解析XML文件的方法

Pull解析方法给应用程序完全的控制文档该怎么样被解析。Android中对Pull方法提供了支持的API,主要是 代码如下:org.xmlpull.v1.XmlPullParser;org.xmlpull.v1.XmlPullParserF
2022-06-06

详解Android中解析XML的方法

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

Android App中使用Pull解析XML格式数据的使用示例

Pull解析XML文件的方式与SAX解析XML文件的方式大致相同,他们都是基于事件驱动的。所以,利用pull解析XML文件需要下面几个步骤: 1)通过XMLPullParserFactory获取XMLPullParser对象。
2022-06-06

Android 解析XML 文件的四种方法总结

java解析xml文件四种方式1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。
2022-06-06

详解Android四种存储方式

在Android程序开发中我们经常遇到四种数据存储方式,每种存储方式都各有不同;以下我分别列举了Android开发中的不同存储方式的特点一,PreferencesPreferences是一个较轻量级的存储数据的方法,具体使用方法:在A中保存
2022-06-06

编程热搜

  • 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第一次实验

目录