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

推荐阅读
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 检查在所有可能的“?”替换中,给定的二进制字符串中是否出现子字符串“10”带 1 或 0 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 实验九:使用SharedPreferences存储简单数据
    本实验旨在帮助学生理解和掌握使用SharedPreferences存储和读取简单数据的方法,包括程序参数和用户选项。 ... [详细]
  • 字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流
    字节流抽象类InputStream和OutputStream是字节流的顶级父类所有的字节输入流都继承自InputStream,所有的输出流都继承子OutputStreamInput ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本文详细解析了客户端与服务器之间的交互过程,重点介绍了Socket通信机制。IP地址由32位的4个8位二进制数组成,分为网络地址和主机地址两部分。通过使用 `ipconfig /all` 命令,用户可以查看详细的IP配置信息。此外,文章还介绍了如何使用 `ping` 命令测试网络连通性,例如 `ping 127.0.0.1` 可以检测本机网络是否正常。这些技术细节对于理解网络通信的基本原理具有重要意义。 ... [详细]
  • 深入解析:Synchronized 关键字在 Java 中对 int 和 Integer 对象的作用与影响
    深入探讨了 `Synchronized` 关键字在 Java 中对 `int` 和 `Integer` 对象的影响。尽管初看此题似乎简单,但其实质在于理解对象的概念。根据《Java编程思想》第二章的观点,一切皆为对象。本文详细分析了 `Synchronized` 关键字在不同数据类型上的作用机制,特别是对基本数据类型 `int` 和包装类 `Integer` 的区别处理,帮助读者深入理解 Java 中的同步机制及其在多线程环境中的应用。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 在C#编程中,设计流畅的用户界面是一项重要的任务。本文分享了实现Fluent界面设计的技巧与方法,特别是通过编写领域特定语言(DSL)来简化字符串操作。我们探讨了如何在不使用`+`符号的情况下,通过方法链式调用来组合字符串,从而提高代码的可读性和维护性。文章还介绍了如何利用静态方法和扩展方法来实现这一目标,并提供了一些实用的示例代码。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 本文详细解析了Java类加载系统的父子委托机制。在Java程序中,.java源代码文件编译后会生成对应的.class字节码文件,这些字节码文件需要通过类加载器(ClassLoader)进行加载。ClassLoader采用双亲委派模型,确保类的加载过程既高效又安全,避免了类的重复加载和潜在的安全风险。该机制在Java虚拟机中扮演着至关重要的角色,确保了类加载的一致性和可靠性。 ... [详细]
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社区 版权所有