热门标签 | 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

推荐阅读
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
  • springMVC JRS303验证 ... [详细]
  • Logback使用小结
    1一定要使用slf4j的jar包,不要使用apachecommons的jar。否则滚动生成文件不生效,不滚动的时候却生效~~importorg.slf ... [详细]
  • 本文详细探讨了Android Activity中View的绘制流程和动画机制,包括Activity的生命周期、View的测量、布局和绘制过程以及动画对View的影响。通过实验验证,澄清了一些常见的误解,并提供了代码示例和执行结果。 ... [详细]
  • 在 Android 开发中,通过 Intent 启动 Activity 或 Service 时,可以使用 putExtra 方法传递数据。接收方可以通过 getIntent().getExtras() 获取这些数据。本文将介绍如何使用 RoboGuice 框架简化这一过程,特别是 @InjectExtra 注解的使用。 ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • 本文详细介绍了 Android 开发中 layout_gravity 属性的使用方法及其在不同布局下的效果,旨在帮助开发者更好地理解和利用这一属性来精确控制视图的布局。 ... [详细]
  • 2017-2018年度《网络编程与安全》第五次实验报告
    本报告详细记录了2017-2018学年《网络编程与安全》课程第五次实验的具体内容、实验过程、遇到的问题及解决方案。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 本文详细介绍了如何使用 PHP 接收并处理微信支付的回调结果,确保支付通知能够被正确接收和响应。 ... [详细]
  • 本文探讨了为何相同的HTTP请求在两台不同操作系统(Windows与Ubuntu)的机器上会分别返回200 OK和429 Too Many Requests的状态码。我们将分析代码、环境差异及可能的影响因素。 ... [详细]
  • 在尝试使用C# Windows Forms客户端通过SignalR连接到ASP.NET服务器时,遇到了内部服务器错误(500)。本文将详细探讨问题的原因及解决方案。 ... [详细]
  • ArcXML:互联网空间数据交换的专用语言
    ArcXML是一种专为ArcIMS平台设计的数据交换协议,基于XML标准,用于在不同组件之间传输和描述地理空间数据。本文将详细介绍ArcXML的背景、用途及其与XML的关系。 ... [详细]
  • Python3 中使用 lxml 模块解析 XPath 数据详解
    XPath 是一种用于在 XML 文档中查找信息的路径语言,同样适用于 HTML 文件的搜索。本文将详细介绍如何利用 Python 的 lxml 模块通过 XPath 技术高效地解析和抓取网页数据。 ... [详细]
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社区 版权所有