栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

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

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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);   //   

      xmlSerializerstartTag("", "root"); 
      xmlSerializerattribute("", "author", "homer"); 
      xmlSerializerattribute("", "date", "2012-04-28"); 

      int personsLen = personslength; 
      for(int i=0; i

运行结果:

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 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();    // 初始化persons 
   xmlHeader = new StringBuffer();// 初始化xmlHeader 
   break; 
    
 case XmlPullParserSTART_TAG: 
   if("root"equals(xppgetName())) { 
     String attrAuthor = xppgetAttributevalue(0); 
     String attrDate = xppgetAttributevalue(1); 
     xmlHeaderappend("root")append("tt"); 
     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

运行结果:

4、Person类

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/160497.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号