热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

求助:如何使用Pull方法解析标签内容,悬赏50分求完美解决方案

在处理XML数据时,如果需要解析``标签的内容,可以采用Pull解析方法。Pull解析是一种高效的XML解析方式,适用于流式数据处理。具体实现中,可以通过Java的`XmlPullParser`或其他类似的库来逐步读取和解析XML文档中的``元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用Pull解析方法来提取``标签的内容,并提供一个示例代码,帮助开发者快速解决问题。


4.0
MP_AND_APP_X1_99BILL_01_05_00_15033117_02
S11000成功
81:7a:88:09:97:2399000291204203460031206106299
12345678910

Android
1.6.0.12
https://XXXXXXXXXX.apk
2


19 个解决方案

#1


这是从服务器返回的数据流。。。直接解析数据流

#2


这个自己百度一下有很多的 直接给代码的话没人时间帮你去做,而且自己做的话效果更好,你可以在做的过程中把遇到的不能解决问题发出来

#3


package com.bill99.kuaiqian;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;

import android.util.Xml;
public class UpdateInfoParser  implements MessageParse{
private Boolean statrtappInfo=false;
 @Override
public List parse(InputStream inStream) throws Exception {
 List updateinfolist=null;
 msgContent updateinfo=null;
 XmlPullParser xmlPullParser= Xml.newPullParser();
     xmlPullParser.setInput(inStream,"UTF-8");     
 int type=xmlPullParser.getEventType();
 while(type!=XmlPullParser.END_DOCUMENT){
 switch (type) {
 case XmlPullParser.START_DOCUMENT: 
 {
 updateinfolist =new ArrayList();
 }
 break;
 case XmlPullParser.START_TAG:
 String tag=xmlPullParser.getName();
 if(tag.equalsIgnoreCase("appInfo")){
 updateinfo=new msgContent();
 type=xmlPullParser.next();
 statrtappInfo=true;
 }
 if(tag.equalsIgnoreCase("latesAppVersion")){
updateinfo.setLatestAppVersion(xmlPullParser.getText());
type=xmlPullParser.next();
 }else if(tag.equalsIgnoreCase("appVersion")){
 updateinfo.setAppVersion(xmlPullParser.getText());
 type=xmlPullParser.next();
 }if(tag.equalsIgnoreCase("responseCode")){
 updateinfo.setResponseCode(xmlPullParser.getText());
 type=xmlPullParser.next();
 }if(tag.equalsIgnoreCase("appFlag")){
 updateinfo.setAppFlag(xmlPullParser.getText());
 type=xmlPullParser.next();
 }if(tag.equalsIgnoreCase("appType")){
 updateinfo.setAppType(xmlPullParser.getText());
 type=xmlPullParser.next();
 }if(tag.equalsIgnoreCase("latestAppVersionUrl")){
 updateinfo.setLatestAppVersionUrl(xmlPullParser.getText());
 type=xmlPullParser.next();
 }
 break;
 case XmlPullParser.END_TAG:
 if(xmlPullParser.getName().equals("appInfo")){
 updateinfolist.add(updateinfo);
 updateinfo=null;
 }
}
 type=xmlPullParser.next(); 
 }
return updateinfolist;

}


}

#4


已经做了,但是最后输出的结果是空值,不知道啥情况

#5


不要直接发代码 用代码格式发 不然看不清楚 例如:
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

#6


package com.bill99.kuaiqian;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;

import android.util.Xml;
public class UpdateInfoParser  implements MessageParse{
private Boolean statrtappInfo=false;
 @Override
public List parse(InputStream inStream) throws Exception {
 List updateinfolist=null;
 msgContent updateinfo=null;
 XmlPullParser xmlPullParser= Xml.newPullParser();
     xmlPullParser.setInput(inStream,"UTF-8");     
 int type=xmlPullParser.getEventType();
 while(type!=XmlPullParser.END_DOCUMENT){
 switch (type) {
 case XmlPullParser.START_DOCUMENT: 
 {
 updateinfolist =new ArrayList();
 }
 break;
 case XmlPullParser.START_TAG:
 String tag=xmlPullParser.getName();
 if(tag.equalsIgnoreCase("appInfo")){
 updateinfo=new msgContent();
 type=xmlPullParser.next();
 statrtappInfo=true;
 }
 if(tag.equalsIgnoreCase("latesAppVersion")){
updateinfo.setLatestAppVersion(xmlPullParser.getText());
type=xmlPullParser.next();
 }else if(tag.equalsIgnoreCase("appVersion")){
 updateinfo.setAppVersion(xmlPullParser.getText());
 type=xmlPullParser.next();
 }if(tag.equalsIgnoreCase("responseCode")){
 updateinfo.setResponseCode(xmlPullParser.getText());
 type=xmlPullParser.next();
 }if(tag.equalsIgnoreCase("appFlag")){
 updateinfo.setAppFlag(xmlPullParser.getText());
 type=xmlPullParser.next();
 }if(tag.equalsIgnoreCase("appType")){
 updateinfo.setAppType(xmlPullParser.getText());
 type=xmlPullParser.next();
 }if(tag.equalsIgnoreCase("latestAppVersionUrl")){
 updateinfo.setLatestAppVersionUrl(xmlPullParser.getText());
 type=xmlPullParser.next();
 }
 break;
 case XmlPullParser.END_TAG:
 if(xmlPullParser.getName().equals("appInfo")){
 updateinfolist.add(updateinfo);
 updateinfo=null;
 }
}
 type=xmlPullParser.next(); 
 }
return updateinfolist;

}





}

#7


引用 6 楼 TaoRenYanLvBu 的回复:
package com.bill99.kuaiqian;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;

import android.util.Xml;
public class UpdateInfoParser  implements MessageParse{
private Boolean statrtappInfo=false;
 @Override
public List parse(InputStream inStream) throws Exception {
 List updateinfolist=null;
 msgContent updateinfo=null;
 XmlPullParser xmlPullParser= Xml.newPullParser();
     xmlPullParser.setInput(inStream,"UTF-8");     
 int type=xmlPullParser.getEventType();
 while(type!=XmlPullParser.END_DOCUMENT){
 switch (type) {
 case XmlPullParser.START_DOCUMENT: 
 {
 updateinfolist =new ArrayList();
 }
 break;
 case XmlPullParser.START_TAG:
 String tag=xmlPullParser.getName();
 if(tag.equalsIgnoreCase("appInfo")){
 updateinfo=new msgContent();
 type=xmlPullParser.next();
 statrtappInfo=true;
 }
 if(tag.equalsIgnoreCase("latesAppVersion")){
updateinfo.setLatestAppVersion(xmlPullParser.getText());
type=xmlPullParser.next();
 }else if(tag.equalsIgnoreCase("appVersion")){
 updateinfo.setAppVersion(xmlPullParser.getText());
 type=xmlPullParser.next();
 }if(tag.equalsIgnoreCase("responseCode")){
 updateinfo.setResponseCode(xmlPullParser.getText());
 type=xmlPullParser.next();
 }if(tag.equalsIgnoreCase("appFlag")){
 updateinfo.setAppFlag(xmlPullParser.getText());
 type=xmlPullParser.next();
 }if(tag.equalsIgnoreCase("appType")){
 updateinfo.setAppType(xmlPullParser.getText());
 type=xmlPullParser.next();
 }if(tag.equalsIgnoreCase("latestAppVersionUrl")){
 updateinfo.setLatestAppVersionUrl(xmlPullParser.getText());
 type=xmlPullParser.next();
 }
 break;
 case XmlPullParser.END_TAG:
 if(xmlPullParser.getName().equals("appInfo")){
 updateinfolist.add(updateinfo);
 updateinfo=null;
 }
}
 type=xmlPullParser.next(); 
 }
return updateinfolist;

}





}

type=xmlPullParser.next(); 除了 留下58行的 全部干掉

#8


赋值不要使用gettext() 使用xmlPullParser.nextText();

#9


还是不管用呀
InputStream input = conn.getInputStream();
 Looper.prepare();
 UpdateInfoParser parse =new UpdateInfoParser();
List b=parse.parse(input);
Log.d(TAG, "解析之后的内容"+b);
Looper.loop();

这个代码是返回的数据流,然后调用封装的pull解析方法,之后在日志中查看解析的结果,日志中的解析结果是空

#10


求大神啊。。。。怎么解决

#11


 public void xml() throws XmlPullParserException, IOException{
     String str = "";
     XmlPullParser xmlPullParser= Xml.newPullParser();
        xmlPullParser.setInput(getResources().openRawResource(R.raw.file),"UTF-8");     
        int type=xmlPullParser.getEventType();
        while(type!=XmlPullParser.END_DOCUMENT){
            switch (type) {
            case XmlPullParser.START_DOCUMENT: 
            {
//                updateinfolist =new ArrayList();
            }
            break;
            case XmlPullParser.START_TAG:
                    String tag=xmlPullParser.getName();
//                    if(tag.equalsIgnoreCase("appInfo")){
//                        updateinfo=new msgContent();
//                        statrtappInfo=true;
//                    }
                if(tag.equalsIgnoreCase("latesAppVersion")){
//                   updateinfo.setLatestAppVersion(xmlPullParser.getText());
                 str +="=====" + xmlPullParser.nextText()+";" ;
                }else if(tag.equalsIgnoreCase("appVersion")){
//                    updateinfo.setAppVersion(xmlPullParser.getText());
                 str +="=====" + xmlPullParser.nextText()+";" ;
                }if(tag.equalsIgnoreCase("responseCode")){
//                    updateinfo.setResponseCode(xmlPullParser.getText());
                 str +="=====" + xmlPullParser.nextText()+";" ;
                }if(tag.equalsIgnoreCase("appFlag")){
//                    updateinfo.setAppFlag(xmlPullParser.getText());
                 str +="=====" + xmlPullParser.nextText()+";" ;
                }if(tag.equalsIgnoreCase("appType")){
//                    updateinfo.setAppType(xmlPullParser.getText());
                 str +="=====" + xmlPullParser.nextText()+";" ;
                }if(tag.equalsIgnoreCase("latestAppVersionUrl")){
//                    updateinfo.setLatestAppVersionUrl(xmlPullParser.getText());
                 str +="=====" + xmlPullParser.nextText()+";" ;
                }
                break;
            case XmlPullParser.END_TAG:
                if(xmlPullParser.getName().equals("appInfo")){
//                    updateinfolist.add(updateinfo);
//                    updateinfo=null;
                }
           }
            type=xmlPullParser.next(); 
        }
        System.out.print(str);
   }
成功拿到数据

#12


大神,如果这个方法有参数呢
public List parse(String result){}

就像这样的,下面那个setInput又怎么办呢??
我是想把这个方法封装起来,然后再别处调用它

谢谢你啊先给分给你

#13


引用 12 楼 TaoRenYanLvBu 的回复:
大神,如果这个方法有参数呢
public List parse(String result){}

就像这样的,下面那个setInput又怎么办呢??
我是想把这个方法封装起来,然后再别处调用它

谢谢你啊先给分给你
 public void xml(int id) throws XmlPullParserException, IOException{
     String str = "";
     XmlPullParser xmlPullParser= Xml.newPullParser();
        xmlPullParser.setInput(getResources().openRawResource(id),"UTF-8");
就这样吧他需要的参数传递进去就ok

#14


还有个问题啊,比如我有个字符串result,在主mainactivity中调用这个方法的时候怎么调用啊

#15


引用 14 楼 TaoRenYanLvBu 的回复:
还有个问题啊,比如我有个字符串result,在主mainactivity中调用这个方法的时候怎么调用啊

你好  问题解决了么 不好意思 我下班一般不上CSDN的

#16


没事没事。问题没解决呢,按照你的方法,里面的是方法参数是int类型啊,可是我调用这个方法处理的是数据流或者string字符串,这个该如何解决呢,后来按照我之前的写的,存入list中,
下面是我代码,
public class msgContent  {
private String appVersion;
private String latestAppVersion;
private String latestAppVersionUrl;
private String appType;
private String appFlag;
private String responseCode;
  public msgContent() {
        
    }
  public msgContent(String appVersion,String latestAppVersion, String latestAppVersionUrl,
  String appType,String appFlag,String responseCode){
  this.appFlag=appFlag;
  this.appType=appType;
  this.appVersion=appVersion;
  this.latestAppVersion=latestAppVersion;
  this.latestAppVersiOnUrl=latestAppVersionUrl;
  this.respOnseCode=responseCode;
  
  }
public String getResponseCode() {
return responseCode;
}
public void setResponseCode(String responseCode) {
this.responseCode = responseCode;
}
public String getAppVersion() {
return appVersion;
}
public void setAppVersion(String appVersion) {
this.appVersion = appVersion;
}
public String getLatestAppVersion() {
return latestAppVersion;
}
public void setLatestAppVersion(String latestAppVersion) {
this.latestAppVersion = latestAppVersion;
}
public String getLatestAppVersionUrl() {
return latestAppVersionUrl;
}
public void setLatestAppVersionUrl(String latestAppVersionUrl) {
this.latestAppVersionUrl = latestAppVersionUrl;
}
public String getAppType() {
return appType;
}
public void setAppType(String appType) {
this.appType = appType;
}
public String getAppFlag() {
return appFlag;
}
public void setAppFlag(String appFlag) {
this.appFlag = appFlag;
}
}






public  class UpdateInfoParser extends Activity implements MessageParse { @Override
public List parse(InputStream inStream) throws Exception {
 List updateinfolist=null;
 msgContent updateinfo=null;
 XmlPullParser xmlPullParser= Xml.newPullParser();
     xmlPullParser.setInput(inStream,"UTF-8");     
 int type=xmlPullParser.getEventType();
 while(type!=XmlPullParser.END_DOCUMENT){
 switch (type) {
 case XmlPullParser.START_DOCUMENT: 
 {
    updateinfolist =new ArrayList();
 }
 break;
 case XmlPullParser.START_TAG:
 String tag=xmlPullParser.getName();
 updateinfo=new msgContent();
 if(tag.equalsIgnoreCase("latesAppVersion")){
 updateinfo.setAppType(xmlPullParser.nextText());
 }else if(tag.equalsIgnoreCase("appVersion")){
 updateinfo.setAppVersion(xmlPullParser.nextText());
 }if(tag.equalsIgnoreCase("responseCode")){
 updateinfo.setResponseCode(xmlPullParser.nextText());
 }if(tag.equalsIgnoreCase("appFlag")){
 updateinfo.setAppFlag(xmlPullParser.nextText());
 }if(tag.equalsIgnoreCase("appType")){
 updateinfo.setAppType(xmlPullParser.nextText());
 }if(tag.equalsIgnoreCase("latestAppVersionUrl")){
 updateinfo.setLatestAppVersionUrl(xmlPullParser.nextText());
 }
 break;
 case XmlPullParser.END_TAG:
 if(xmlPullParser.getName().equalsIgnoreCase("appInfo")){
 updateinfolist.add(updateinfo);
 updateinfo=null;
 }
}
 type=xmlPullParser.next(); 
 }
return updateinfolist;
}

}



#17


现在我主函数有个input数据流,或者一个string字符串想调用这个方法,应该怎么调用??

#18


   UpdateInfoParser updateInfoParser=new UpdateInfoParser();
    List b=updateInfoParser.parse(input);



我这样调用,想获取list中的值,总是报空,大神有办法么

#19


引用 18 楼 TaoRenYanLvBu 的回复:
   UpdateInfoParser updateInfoParser=new UpdateInfoParser();
    List b=updateInfoParser.parse(input);



我这样调用,想获取list中的值,总是报空,大神有办法么

汗 刚才有点忙 没时间上csdn 现在才看到你消息,你加我扣 扣吧 469534249

#20


  • C# WebSocket
  • Android之PULL解析XML

推荐阅读
  • 本文详细介绍了如何在现有的Android Studio项目中集成JNI(Java Native Interface),包括下载必要的NDK和构建工具,配置CMakeLists.txt文件,以及编写和调用JNI函数的具体步骤。 ... [详细]
  • 本文介绍了在Android项目中实现时间轴效果的方法,通过自定义ListView的Item布局和适配器逻辑,实现了动态显示和隐藏时间标签的功能。文中详细描述了布局文件、适配器代码以及时间格式化工具类的具体实现。 ... [详细]
  • Android商城应用开发指南(第二部分):创建启动欢迎页
    大多数商城应用程序在启动时会显示一个欢迎页面,以提升用户体验。本文将指导您如何实现一个基本的欢迎页,该页面会在用户打开应用后短暂展示,随后自动跳转至主界面。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • LCUI 2.1.0 版本现已推出,这是一个用 C 语言编写的图形用户界面开发库,适合创建轻量级的桌面应用程序。此次更新包括多项修复和功能增强,并正式宣布将启动 Android 支持的开发计划。 ... [详细]
  • Android中实现复合旋转动画效果
    本文将探讨如何在Android应用中实现动态且吸引人的旋转动画。通过结合多种动画类型,如透明度变化、旋转、缩放和位移,可以创造出更为复杂的视觉效果。我们将从XML布局和Java代码两个方面进行详细介绍。 ... [详细]
  • Android开发技巧:实现带描边的圆角图片
    本文介绍了一种在Android应用中实现带描边的圆角图片的方法。通过使用BitmapShader类,开发者可以轻松地为图片添加圆角和描边效果,提升应用的视觉体验。 ... [详细]
  • Java 中 Writer flush()方法,示例 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文总结了在使用Ionic 5进行Android平台APK打包时遇到的问题,特别是针对QRScanner插件的改造。通过详细分析和提供具体的解决方法,帮助开发者顺利打包并优化应用性能。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文介绍了ADB(Android Debug Bridge)的基本概念、安装方法、环境配置、连接真机步骤以及常用命令和高级技巧。ADB是一个强大的工具,适用于Android设备的开发和调试。 ... [详细]
  • 本文分享了作者在蚂蚁集团内部转岗过程中经历的四轮技术面试及一次项目负责人面谈的详细情况,旨在为准备类似面试的读者提供参考。 ... [详细]
author-avatar
似水年华的梦想_818
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有