Android 中的XML 解析方法Pull 和Sax

OpenEvidence DeepConsult深度分析:技术架构、临床应用与行业影响 摘要:医疗AI平台OpenEvidence通过多智能体协作系统重构临床决策流程,解决了医学信息过载难题。其DeepConsult系统严格基于同行评审文献,5-10秒内提供循证决策支持,已覆盖40%美国医生,月咨询量达850万次。该平台采用"免费工具+广告变现"模式,通过调度、检索、摘要等模块化智能体分工,实现从文献分析到临床建议的闭环处理,在USMLE测试中准确率达90%。2025年获7500万美元融资后估值突破10亿美元,成为医疗AI领域的新范式。 阅读详情

代码:Pull和SAX 解析的实例

XML 解析一般有三种,DOM,Pull和SAX,相比于DOM的,Pull 和SAX内存占用小效率高,所以我们一般使用Pull和SAX解析。
0:Pull和SAX都是通过工厂类来创建解析类的.
1:Pull和SAX的最大的区别就是,具体的解析的过程,SAX 是在while 循环里面通过XmlPullParser.next()来遍历的,而Pull 是通过专门的DefaultHanlder 来处理的,结构上面SAX更好,


Pull流程:
0:首先通过工厂类来获取XmlPullParser的实体类,
1:得到xml的文件的输入流,这个输入流可以是通过网络得到的也可以是通过本地得到的,例如放在raw文件夹里面的文件
2:通过setInput 来开始读取,还需要设置它的编码

//XmlPullParser的工厂类
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser = factory.newPullParser();
//xmlPullParser.setInput的第一个参数就是 InputStream,
//这里是将xml 文件放在了raw文件夹里面,然后通过getResources().openRawResource(R.raw.worker)来获取
InputStream inputStream = getResources().openRawResource(R.raw.worker);
//开始读取文件,并设置编码类型为utf-8
xmlPullParser.setInput(inputStream, "utf-8");

3:读取的时候是通过eventType来判断当前的位置是文件的开始开始还是结束,还是节点的开始和节点的结束.通过XmlPullParser的next的方法来跳到下一个节点。

//获取event的类型,然后循环直至END_DOCUMENT,循环的增加条件一定不能忘记eventType=xmlPullParser.next();
int eventType = xmlPullParser.getEventType();
while (eventType!=XmlPullParser.END_DOCUMENT){
.....
   eventType=xmlPullParser.next();
}
4:在节点的START_TAG里面通过XmlPullParser的nextText()来获取节点里面的内容,
5:如果这个节点里面有属性,可以通过XmlPullParser的getAttributeCount来获取属性的总数,然后循环获取,通过getAttributeName getAttributeValue 来获取属性名字和值



SAX流程:

0:首先也是通过工厂类来获取SAXParser的实体类
1:然后获取XMLReader
2:创建MyHandler,
处理类DefaultHandler 里面的5个方法和我们Pull里面的while 循环里面相对应的。结构更明显。
startDocument() 
startElement(String uri, String localName, String qName, Attributes attributes)
characters(char[] ch, int start, int length)
endElement(String uri, String localName, String qName)
endDocument()


记住了在endElement 里面一定要设置全局变量mQualifiedName=null,因为在xml文件里面,它会将TAB的符号也读入进来,不仅仅是节点信息,
当读完了endElement 以后,它继续读取后面的内容,例如下面的name 的节点后面就有换行符号,下一行读取到sex 之前还有两个Tab的符号。所以读取的Tab 信息会覆盖原来的Mark的这个信息
<workers>
<worker id="AQ01">
<name>Mark</name>
<sex>男</sex>
<status>经理</status>
<address>北京</address>
<money>4000</money>
</worker>


3:将MyHandler设置到xmlReader
xmlReader.setContentHandler(saxHandler);
4:然后开始读取
xmlReader.parse(new InputSource(getResources().openRawResource(R.raw.worker)));
5:最后获取List
        saxList = saxHandler.getmList();


//SAX 的工厂类
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
SAXParser saxParser = saxParserFactory.newSAXParser();
// 通过parser得到XMLReader对象
XMLReader xmlReader = saxParser.getXMLReader();
//创建MyHandler的实例
MyHandler saxHandler = new MyHandler();
//将saxHanlder 放入xmlReader中。
xmlReader.setContentHandler(saxHandler);
xmlReader.parse(new InputSource(getResources().openRawResource(R.raw.worker)));
//此时通过MyHandler 里面的方法来获取List<Worker>
saxList = saxHandler.getmList();


具体实例如下:

++++++++++++++++++++++++++++++++++++++++++++++

XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<workers>
   <worker id="AQ01">
      <name>Mark</name>
      <sex>男</sex>
      <status>经理</status>
      <address>北京</address>
      <money>4000</money>
   </worker>
   <worker id="AD02">
      <name>Luch</name>
      <sex>女</sex>
      <status>员工</status>
      <address>上海</address>
      <money>1000</money>
   </worker>
   <worker id="AD03">
      <name>Lily</name>
      <sex>女</sex>
      <status>员工</status>
      <address>北京</address>
      <money>2000</money>
   </worker>
   <worker>
      <name>Lily</name>
      <sex>女</sex>
      <status>员工</status>
      <address>北京</address>
      <money>2000</money>
   </worker>
</workers>


+++++++++++++++++++++++++++++++++++++++++++++++++++

Worker实体类

package tech.androidstudio.xmlpullparserdemo;

/**
 * Created by Kodulf on 2016/3/18.
 */
public class Worker {

    private String id;
    private String name;
    private String sex;
    private String status;
    private String address;

    public Worker() {
    }

    public Worker(String id, String name, String sex, String status, String address, double money) {

        this.id = id;
        this.name = name;
        this.sex = sex;
        this.status = status;
        this.address = address;
        this.money = money;
    }

    @Override
    public String toString() {
        return "Worker{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", status='" + status + '\'' +
                ", address='" + address + '\'' +
                ", money=" + money +
                '}';
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    private double money;

}


++++++++++++++++++++++++++++++++++++++++++++++++++++++

MainActivity
++++++++++++++++++++++++++++++++++++++++
package tech.androidstudio.xmlpullparserdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        List<Worker> list = null;
        try {
            list = pullGetList();
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //输出结果
        Log.d("kodulf", list.toString());


        try {
            list=saxGetList();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //输出结果
        Log.d("kodulf","SAX 解析的结果"+list.toString());
    }

    private List<Worker> pullGetList() throws XmlPullParserException, IOException {
        /**
        <worker id="AQ01">
        <name>Mark</name>
        <sex>男</sex>
        <status>经理</status>
        <address>北京</address>
        <money>4000</money>
        </worker>
         */

        List<Worker> list = new ArrayList<Worker>();
        Worker worker=null;
        //XmlPullParser的工厂类
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        XmlPullParser xmlPullParser = factory.newPullParser();

        //xmlPullParser.setInput的第一个参数就是 InputStream,
        //这里是将xml 文件放在了raw文件夹里面,然后通过getResources().openRawResource(R.raw.worker)来获取
        InputStream inputStream = getResources().openRawResource(R.raw.worker);
        //开始读取文件,并设置编码类型为utf-8
        xmlPullParser.setInput(inputStream, "utf-8");

        //获取event的类型,然后循环直至END_DOCUMENT,循环的增加条件一定不能忘记eventType=xmlPullParser.next();
        int eventType = xmlPullParser.getEventType();
        while (eventType!=XmlPullParser.END_DOCUMENT){
            switch (eventType){
                case XmlPullParser.START_DOCUMENT:
                    Log.d("Kodulf","start document");
                    break;
                //每一个节点开始标签,开始判断,判断是哪一个节点
                case XmlPullParser.START_TAG:
                    //获取节点名字就像是name,sex,status,address,money
                    String name = xmlPullParser.getName();
                    //<worker id="AQ01"> 第一个 节点,里面有一个id的属性,通过getAttribute来获取
                    if("worker".equals(name)){
                        worker = new Worker();
                        int attributeCount = xmlPullParser.getAttributeCount();
                        for (int i = 0; i < attributeCount; i++) {
                            String attributeName = xmlPullParser.getAttributeName(i);
                            if("id".equals(attributeName)){
                                String attributeValue = xmlPullParser.getAttributeValue(i);
                                worker.setId(attributeValue);
                            }
                        }
                        //节点name,获取里面的内容是通过xmlPullParser.nextText()来获取的。
                    }else if("name".equals(name)){
                        String text = xmlPullParser.nextText();
                        worker.setName(text);
                    }else if("sex".equals(name)){
                        String text = xmlPullParser.nextText();
                        worker.setSex(text);
                    }else if("status".equals(name)){
                        String text = xmlPullParser.nextText();
                        worker.setStatus(text);
                    }else if("address".equals(name)){
                        String text = xmlPullParser.nextText();
                        worker.setAddress(text);
                        //节点money的内容也是通过xmlPullParser.nextText()来获取,
                        // 但是设置的时候因为我们的实体类是double类型的所以要转换一下
                    }else if("money".equals(name)){
                        String text = xmlPullParser.nextText();
                        worker.setMoney(Double.parseDouble(text));
                    }
                    break;
                //在 END_TAG里面判断最后的节点,然后添加到list里面去
                case XmlPullParser.END_TAG:
                    String name1 = xmlPullParser.getName();
                    if ("worker".equals(name1)){
                        list.add(worker);
                    }
                    break;
            }
            //TODO 这个判断条件一定不能变
           eventType=xmlPullParser.next();
        }

        return list;
    }


    //SAX 解析
    public List<Worker> saxGetList() throws ParserConfigurationException, SAXException, IOException {
        List<Worker> saxList = new ArrayList<Worker>();
        //SAX 的工厂类
        SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
        SAXParser saxParser = saxParserFactory.newSAXParser();
        // 通过parser得到XMLReader对象
        XMLReader xmlReader = saxParser.getXMLReader();
        //创建MyHandler的实例
        MyHandler saxHandler = new MyHandler();
        //将saxHanlder 放入xmlReader中。
        xmlReader.setContentHandler(saxHandler);
        xmlReader.parse(new InputSource(getResources().openRawResource(R.raw.worker)));
        //此时通过MyHandler 里面的方法来获取List<Worker>
        saxList = saxHandler.getmList();


        return saxList;
    }

}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

SAX的DefaultHandler

package tech.androidstudio.xmlpullparserdemo;

import android.util.Log;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Kodulf on 2016/3/18.
 */
public class MyHandler extends DefaultHandler {
    List<Worker> mList;
    Worker mWorker;
    String mQualifiedName;
    /**
     <worker id="AQ01">
     <name>Mark</name>
     <sex>男</sex>
     <status>经理</status>
     <address>北京</address>
     <money>4000</money>
     </worker>
     */
    @Override
    public void startDocument() throws SAXException {
        super.startDocument();
        Log.d("Kodulf", "SAX start Document");
        //在 startDocument 里面初始化List
        mList = new ArrayList<Worker>();
    }

    //这里的 qName-》qualified name 限定名 ,这个 参数要设置为成员变量,因为下面的characters里面需要用到。
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        super.startElement(uri, localName, qName, attributes);
        mQualifiedName=qName;
        //如果startElement是worker的话,<worker id="AQ01">,要获取属性id的 值
        if("worker".equals(qName)){
            mWorker = new Worker();
            int length = attributes.getLength();
            for (int i = 0; i < length; i++) {
                String attributeName = attributes.getQName(i);
                if("id".equals(attributeName)){
                    String attributeValue = attributes.getValue(i);
                    mWorker.setId(attributeValue);
                }
            }
        }
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        /**
        <name>Mark</name>
        <sex>男</sex>
        <status>经理</status>
        <address>北京</address>
        <money>4000</money>
                */
        super.characters(ch, start, length);
        String nodeValue = new String(ch,start,length);
        if("name".equals(mQualifiedName)){
            mWorker.setName(nodeValue);
        }else if("sex".equals(mQualifiedName)){
            mWorker.setSex(nodeValue);
        }else if("status".equals(mQualifiedName)){
            mWorker.setStatus(nodeValue);
        }else if("address".equals(mQualifiedName)){
            mWorker.setAddress(nodeValue);
        }else if("money".equals(mQualifiedName)){
            //注意这里的Money 是double 类型的,所以要转换一下
            mWorker.setMoney(Double.parseDouble(nodeValue));
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        super.endElement(uri, localName, qName);
        //TODO 一定要将全局变量mQualifiedName 设置为空,
        //例如下面的</money>的节点后面就有换行符号,下一行读取到</worker>之前还有Tab的符号。
        // 所以读取的Tab 信息会覆盖原来的4000的这个信息.所以再赋值的时候 就是将一个Tab的信息复制给Double 的了,所以报错了。
        mQualifiedName=null;
        //判断是否是worker,如果是的话,就将mWorker 添加到list 里面去
        if("worker".equals(qName)){
            mList.add(mWorker);
        }
    }

    @Override
    public void endDocument() throws SAXException {
        super.endDocument();
        Log.d("Kodulf", "SAX end Document");
    }

    public List<Worker> getmList(){
        return mList;
    }
}


需求跟踪详解 需求跟踪是指在软件项目开发过程中,建立并维护需求与项目各阶段工作产物(如设计文档、代码模块、测试用例等)之间对应关系的过程。它不仅记录需求从提出到实现的完整路径,还能反映需求变更时对各阶段工作的影响范围,是连接用户期望与实际软件开发产出的桥梁。 阅读详情

相关推荐

CUDA 12.1环境下的动态库链接修复:从libcusparse.so.12的undefined symbol错误到libnvJitLink.so.12的正确加载

本文详细解析了在CUDA 12.1环境下,PyTorch因libcusparse.so.12找不到libnvJitLink.so.12中的__nvJitLinkAddData_12_1符号而报错的根本原因。通过诊断动态链接过程,提供了创建符号链接、修改环境变量等三种解决方案,并深入探讨了nvJitLink组件的作用及环境配置的最佳实践,帮助开发者彻底解决此类动态库链接问题。

c8d9e0f1的博客 206

Java进阶之Sax、Dom和Pull解析xml

1 概念   Java的xml解析器库有很多,万变不离其宗的就是SAX和DOM解析器。 1.1 DOM解析   DOM的全称是Document Object Model,也即文档对象模型。在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个对象模型的操作,来实现对XML文档数据的操作。通过DOM接口,应用程序可以在任何时候访...

chenliguan的博客 519

【eNSP 华为模拟器】小型校园网模拟环境的设计与配置(附eNSP源文件)

【eNSP 华为模拟器】小型校园网模拟环境的设计与配置 一、实验概述 二、交换机的配置 2.1 二层交换机的配置 2.2 三层交换机的配置 三、路由器的配置 四、实验结果 五、实验总结 一、实验概述 按照以下的拓扑连接,自行设计VLAN和IP地址等网络参数,实现PC1到PC2的IP通信。其中,R1,R2为路由器;LSW1,LSW4为3层交换机;LSW2,LSW3 ,LSW6, LSW7为2层交换机;CLIENT1-CLIENT12为PC机。 拓扑图 课程设计要求:(1)IP地址自行规划设计,应该清晰地

qq_43757282的博客 4万+

XML解析中SAX和XMLpull的区别

最近在写一个rss应用,自然设计到对XML的处理,不懂为什么他使用的是XMLPULL而不是SAX.Baidu了下,原来如此  如果在一个XML文档中我们只需要前面一部分数据,但是使用SAX方式或DOM方式会对整个文档进行解析,尽管XML文档中后面的大部分数据我们其实都不

leorowe的专栏 1万+

MIPI video mode 和 command mode 的区别

1、何为LCD RAM? LCD 是指字面意思是液晶显示屏(Liquid Crystal Display), 而RAM: 随机存取存储器(Random-Access Memory),两者完全是风马牛不相及的东西。 下图是一个标准的LCD的爆炸图(不含TP),请注意图中红色mark的地方:控制IC-- LCD的大脑。所谓的LCD RAM自然是指此大脑是否包含RAM. 题外话<不感兴趣的...

精诚所至 4690

Linux-VMware安装后没有虚拟网卡VMnet1和VMnet8(亲测有效,一步一步跟着绝对成功)

VMware-安装后没有虚拟网卡VMnet1和VMnet8 就这个破东西我昨天弄了一天,网上什么VMware卸载重装,用CCleaner清理注册表什么的操作我全用了,但是昨天就是弄不好,同样的操作我昨天试了无数遍一直觉得可能是 持续更新中… 文章参考学习地址:https://blog.youkuaiyun.com/qq_42445139/article/details/87872130 ...

杨的博客 8851

pull解析和sax解析的区别

Pull解析和SAX解析是两种不同的XML解析方式。Pull解析是一种顺序读取XML文档的方式,而SAX解析是一种事件驱动的方式,它通过触发特定的事件来解析XML文档。

一指流沙的博客 662

RK3588 hdmirx 调试(含v4l2工具,edid编辑)

RK3588 Buildroot系统中调试HDMI-RX的过程,包括抓图、修改EDID数据、编辑EDID等操作。首先,通过logcat和寄存器信息查询HDMI-RX的状态,使用v4l2-ctl工具进行测试和修改EDID。

501846585_QQAndroid_java 2685

xml解析之SAX解析和PULL解析

一:解析user.xml配置文件。 张三 30 男 李四 32 女 wangwu 30 男 1.SAX解析过程: 创建一个MyHandler类继承DefaultHandler,重写startDocument、startElement、characters、endElement 、endD

bobge的IT专栏 1212

系规备考论文:论IT服务规划设计

系规备考论文:论IT服务规划设计

liuxu324的博客 1145

Freeswitch 如何检测链路是否有回铃音

Freeswitch回铃音检测解决方案 问题描述:呼叫手机时,虽然信令正常(183/180),但部分手机无回铃音,导致坐席无法判断是否接通,用户体验差。 解决方案: 先播放本地音频作为回铃音 实时检测用户侧是否有声音输入 检测到声音后自动切换为用户侧音频 技术实现: 使用Freeswitch APP实现功能 创建结构体保存实例数据(包括铃声文件、会话句柄、VAD检测器等) 通过media bug机制实现音频流的替换 利用VAD(语音活动检测)技术监控用户侧声音 当检测到用户说话时自动终止本地铃声播放 该方案

2301_81507069的博客 51

PULL解析器相比于DOM和SAX解析器有以下优势

XML文档的大小:如果XML文档较大,DOM解析器可能会占用大量的内存,因为它需要将整个文档加载到内存中。方便的导航和修改:DOM解析器将整个XML文档加载到内存中,以树形结构表示,可以方便地导航和修改XML文档的内容。请注意,上述代码中的"example.xml"是一个示例XML文件的路径,你需要根据实际情况修改为你要解析的XML文件的路径。综上所述,SAX解析器适用于处理大型XML文档和顺序访问的场景,而DOM解析器适用于需要随机访问XML文档内容的场景。

[Blog][Domain] programb.blog.youkuaiyun.com 1198

【AutoSAR】【BootLoader】AutoSAR Bootloader 原理与流程

目录 一、HIS规范 二、BOOTLOADER软件架构 三、烧写流程 一、HIS规范 国外整车厂意识到在线刷新ECU的重要性,由奥迪公司、宝马公司、戴姆勒公司、保时捷公司、大众公司成立一个委员会,名为HIS委员会,专门负责帮助汽车制造商掌握微处理器控制单元软件和质量保证领域的原理和方法; HIS Bootloader的主要功能是通过标准的通信接口对ECU进行再编程 。 HIS Bootloader的软件设计基于AUTOSAR体系架构、ISO14229、ISO15765-2、HI...

专注汽车软件开发、AutoSAR、车载以太网、SOA、EE架构。 5250

java解析XML——Pull解析

除了可以使用SAX或DOM解析XML文件之外,在Android中可以使用Android内置的Pull解析器解析XML文件。 Pull解析器是一个开源的java项目,既可以用于android,也可以用于JavaEE。如果用在javaEE需要把其jar文件放入类路径中,因为Android已经集成进了Pull解析器,所以无需添加任何jar文件。android系统本身使用到的各种xml文件,其内部也是采用

u014471160的博客 2413

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

安卓使用DOM,SAX,PULL解析xml,安卓写入xml文件

Xml简介 对Xml不太了解的同学可以看一下这篇Xml的简介:http://www.cnblogs.com/SkySoot/archive/2012/08/24/2654319.html DOM解析Xml Dom解析Xml的时候,会将Xml文件的所有内容以文件树的形式存储到内存中,然后用户通过使用DOM API遍历Xml树,检索需要的内容。 但是,因为它将文件树放在了内存中,如果文件较大的

YanRu的专栏 934

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Android XML文档解析(一)——SAX解析

------------------------------------------------------------------------------------------------------ 此文章仅作为学习交流所用 转载或引用请务必注明原文地址: http://blog.youkuaiyun.com/luzhenrong45/article/d...

weixin_30765577的博客 109

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android Pull解析xml

Pull解析和Sax解析很相似,都是轻量级的解析,在Android的内核中已经嵌入了Pull,所以我们不需要再添加第三方jar包来支持Pull。Pull解析和Sax解析不一样的地方有 (1)pull读取xml文件后触发相应的事件调用方法返回的是数字 (2)pull可以在程序中控制想解析到哪里就可以停止解析。 看实例: book.xml如下: Xml代码   xml ve

phonelee的专栏 311

Android中使用SAX解析XML

SAX是一种以事件驱动的XML API,由它定义的事件流可以指定从解析器传到专门的处理程序的代码的XML结构,简单的说,它解析速度快,占用内存少。这种解析器比较适合android等移动设备。 使用SAX的优点是:因为SAX的优势是使用流的方式处理,当遇到一个标签的时候,并不会记录当前所碰到的标签。也就是说,startElement方法中,你所知道的信息,仅仅是当前标签的名字和属性,至于标签的嵌套结构,上层标签的名字,是否有子元素与其他结构相关的信息,都是未知的。下面介绍的实例中,为了体现现实开发中

何松林的专栏 627

Android 网络传输数据之解析XML格式数据(Pull&SAX)

@Override public void onClick(View v) { if(v.getId() == R.id.send_request){ sendRequestWithOjHttp(); } } private void sendRequestWithOjHttp(){ //开启线程来发起网络请求 new Thread(new Runnable() { @Override public void run() { HttpURLConnection connection = null; Buff

m0_67598977的博客 270

Android中XML数据解析

下载请注明出处: XML初步        今天我们来学习另一种非常重要的数据交换格式-XML。XML(Extensible Markup Language的缩写,意为可扩展的标记语言),它是一种元标记语言,即定义了用于定义其他特定领域有关语义的、结构化的标记语言,这些标记语言将文档分成许多部件并对这些部件加以标识。XML 文档定义方式有:文档类型定义(DTD)和XML Schema。

叶功恒的博客专栏 4639

android解析XML的三种方式(DOM,SAX,PULL)

本文的内容基本上是来自于另一篇文章,详细的请参考: http://www.cnblogs.com/zhangdongzi/archive/2011/04/14/2016434.html 然后自己简单的总结了一下,手动写了个demo来练手,把三种方式都写在一个类里面 1. DOM DOM方式解析xml是先把xml文档都读到内存中,然后再用DOM API来访问树形结构,并获取数据的

Chuekup的专栏 1165

解析xml的三种方式DOM/SAX/PULL

我们现在的大多开发项目中都难免和服务器端打交道,交互的过程无非是数据输入和输出,当我们将接口要求的数据按照格式传输到服务器端后,就会得到服务器端返回的数据,在行业内数据大多会使用被普遍接受和采用的 XML 格式(也有不少使用 JSON )来组织数据进行返回,当我们获得 XML 时就可以解析获得自己需要的数据,或许是操作结果,或许是需要展示的数据列表,在 Android中主要有三种的 XML 解析方

萌萌的It人 www.itmmd.com 1100

pythonjava解释xml_Xml解析之——Java/Android/Python

Xml解析之——Java/Android/Python一、Xml文件 test.xml1 2 George3 John4 Reminder5 Don't forget the meeting!6 7 fetch="."8 review="gerrit.huaqin.com:8081" />9 10 remote="origin"11 sync-j="4" />12 上面是一个简单的xm...

weixin_39675679的博客 225

Xml 格式数据的生成和解析

什么是XMLXML全称为Extensible Markup Language, 意思是可扩展的标记语言,它是 SGML(标准通用标记语言)的一个子集。XML语法上和HTML比较相似,但HTML中的元素是固定的,而XML的标签是可以由用户自定义的。W3C在1998年2月发布1.0版本; W3C在2004年2月发布1.1版本,但因为1.1版本不能向下兼容1.0版本,所以1.1没有人用。同时,在2004

JackChan 2万+

Android Parse XML

在Android平台上可以使用Simple API for XML(SAX) 、 Document Object Model(DOM)和Android附带的pull解析器解析XML文件。 下面是本例子要解析的XML文件: 文件名称:itcast.xml <?xml version="1.0" encoding="UTF-8"?> <perso...

weixin_30375247的博客 132

Android中级之网络数据解析一之xml解析

本文来自http://blog.youkuaiyun.com/liuxian13183/,引用必须注明出处! --ComicSansMS Xml解析具有跨平台性,语言无关性,易操作性,因此广受开发者的欢迎。作为安卓开发者,至少有三种解析方式需要理解,Dom、Sax、Pull。 另外Java的四种解析XML的方法:http://developer.51cto.com/art/2009

劝学 2706
上一篇: SAX解析错误,org.apache.harmony.luni.util.FloatingPointParser.parseDouble(FloatingPointParser.java:267)
下一篇: Spinner报错: java.lang.RuntimeException: setOnItemClickListener cannot be used with a spinner.
千雅爸爸
博客等级 码龄18年 292粉丝 639原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值