Android 系列学习之XML文本数据解析
什么是XML? XML是一种扩展标志语言。标准通用标记语言的子类,一种标记电子文件使其具有结构性的标记语言,一种可以有用户自定义标志的的源语言。
XMl的特点:
- 一种标记语言,很类似HTML
- 其宗旨是传输数据
- 标签没有被预定义,用户需要自己定义标签
- 具有较好的自我秒描述性
- 是W3C推荐标准
- 纯文本信息
- 空格会被保留
XML与HTML有啥区别呢?
- XML旨在传输信息。XML被设置为传输和储存数据,焦点在数据内容;
- HTML旨在显示信息。HTML被设计问显示信息,焦点在信息的展示外观;
- XML的标签都没有预定义,需要用户自定义标签,HTML则是所有表亲都是预定义的。
常使用来解析XML数据的两种方式:SAX解析,在Android中较为流行的一种解析器;还有就是Document解析,在Android中,用的还是相对比较少的。
下面实例来比较一下两种的区别。
Document 解析:
步聚
- 获取document的解析工厂;DocumentBuilderFactory
- 获取DocumentBuilderFactory
- 获取Document实例
实例代码:
//获取Documen的解析工厂 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder(); //获取解析的器的对象Document // inputStream为读取本地XML文件获取到的inputStream或者是web获取的inputStream, // 这里使用的是获取web服务器上的XML文件的inputStream Document document = builder.parse(inputStream);
这样就可以轻松获取到Document的实例了,下面看一下解析XML数据,其实也是挺简单的。解析的数据文本是:
根据上述XML文本,解析数据
//获取XML文件的“根”元素包括的内容,即最外从元素包含的内容 Element documentElement = document.getDocumentElement(); //获取子对象的全部内容,返回一个包含全部子对象的队列 NodeList nodeList = documentElement.getElementsByTagName("user"); for (int i = 0; i < nodeList.getLength(); i++) { //获取到nodeList的每一个子对象 Element node = (Element) nodeList.item(i); //获取该对象node的属性 即数据的id String id = node.getAttribute("id"); //再获取node下的子元素 队列 NodeList nameList = node.getElementsByTagName("name"); NodeList sexList = node.getElementsByTagName("sex"); NodeList classesList = node.getElementsByTagName("classes"); //提取数据 String name = nameList.item(0).getTextContent(); String sex = sexList.item(0).getTextContent(); String classes = classesList.item(0).getTextContent(); Log.e("nodeAttribute", id); Log.e("name",name); Log.e("sex",sex); Log.e("classes",classes); }
解析的结果:
结果是结束正确的。
下面看一下SAX解析XML文本数据。
SAX解析XML文档采用事件驱动模式。什么是事件驱动模式?它将XML文档转换成一系列的事件,由单独的事件处理器来决定如何处理。
基于事件驱动的处理模式主要是基于事件源和事件处理器(或者叫监听器)来工作的。一个可以产生事件的对象叫做事件源,而一个可以针对事件做出响应的对象就被叫做事件处理器。
步聚:
- 创建DefaultHandler子类并实现一定相应的方法
- 创建解析器的工厂类SAXParserFactory
- 创建解析器的解析类SAXParser
- 获取XMLReader的实例
- 创建DefaultHandler子类注册到XMLReader当中
- 将从XML文件获取到的inputStream丢给XMLReader开始解析
实例代码:
//获取解析器工厂类 SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); //获取解析器的解析类 SAXParser saxParser = saxParserFactory.newSAXParser(); //获取XMLReader实例 XMLReader xmlReader = saxParser.getXMLReader(); //XMLReader 与创建DefaultHandler子类关联(DefaultHandler注册到XMLReader) xmlReader.setContentHandler(new XMLHandlers()); //开始解析,InputStream为从本地读取XML文件获得的InputStream // 或者是从web上获取的InputStream xmlReader.parse(new InputSource(inputStream));
解析开始了,怎么来获取数据呢?还是用上面的XML文本数据
解析数据至少需要在创建DefaultHandler子类中复写以下三方法
/** * 开始读取元素 * * @param uri * @param localName 无前缀的标签 * @param qName 有前缀的标签 * @param attributes 属性集合 * @throws SAXException */ @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); Log.e("startElement", "startElement"); this.localName = localName; if ("user".equals(localName)) { for (int i = 0; i < attributes.getLength(); i++) { Log.e("user_id", attributes.getValue("id")); } } }
/** * 读取元素结束 * * @param uri * @param localName 无前缀 的标签 * @param qName 有前缀的标签 * @throws SAXException */ @Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); Log.e("endElement", "endElement"); }
/** * 解析数据 * * @param ch 字符数组 * @param start 开始位置 * @param length 字符数组的长度 * @throws SAXException */ @Override public void characters(char[] ch, int start, int length) throws SAXException { super.characters(ch, start, length); Log.e("characters", "characters"); if (localName.equals("name")) { name = new String(ch, start, length); Log.e("name", name); } else if (localName.equals("sex")) { sex = new String(ch, start, length); Log.e("sex", sex); } else if (localName.equals("classes")) { classes = new String(ch, start, length); Log.e("classes", classes); } }
析出来的数据,有点儿难看,但是仔细看也不难,而且还会发现一点儿奇怪的东西。
09-17 15:05:10.637 2535-2553/? E/startDocument﹕ startDocument 09-17 15:05:10.639 2535-2553/? E/startElement﹕ startElement 09-17 15:05:10.639 2535-2553/? E/characters﹕ characters 09-17 15:05:10.639 2535-2553/? E/characters﹕ characters 09-17 15:05:10.639 2535-2553/? E/startElement﹕ startElement 09-17 15:05:10.639 2535-2553/? E/user_id﹕ 1 09-17 15:05:10.639 2535-2553/? E/characters﹕ characters 09-17 15:05:10.639 2535-2553/? E/characters﹕ characters 09-17 15:05:10.639 2535-2553/? E/startElement﹕ startElement 09-17 15:05:10.639 2535-2553/? E/characters﹕ characters 09-17 15:05:10.639 2535-2553/? E/name﹕ gaosi 09-17 15:05:10.639 2535-2553/? E/endElement﹕ endElement 09-17 15:05:10.639 2535-2553/? E/characters﹕ characters 09-17 15:05:10.639 2535-2553/? E/name﹕ [ 09-17 15:05:10.639 2535: 2553 E/characters ] characters 09-17 15:05:10.639 2535-2553/? E/name﹕ [ 09-17 15:05:10.639 2535: 2553 E/startElement ] startElement 09-17 15:05:10.639 2535-2553/? E/characters﹕ characters 09-17 15:05:10.639 2535-2553/? E/sex﹕ 男 09-17 15:05:10.639 2535-2553/? E/endElement﹕ endElement 09-17 15:05:10.640 2535-2553/? E/characters﹕ characters 09-17 15:05:10.640 2535-2553/? E/sex﹕ [ 09-17 15:05:10.640 2535: 2553 E/characters ] characters 09-17 15:05:10.640 2535-2553/? E/sex﹕ [ 09-17 15:05:10.640 2535: 2553 E/startElement ] startElement 09-17 15:05:10.640 2535-2553/? E/characters﹕ characters 09-17 15:05:10.640 2535-2553/? E/classes﹕ 3 09-17 15:05:10.640 2535-2553/? E/endElement﹕ endElement 09-17 15:05:10.640 2535-2553/? E/characters﹕ characters 09-17 15:05:10.640 2535-2553/? E/classes﹕ [ 09-17 15:05:10.640 2535: 2553 E/characters ] characters 09-17 15:05:10.640 2535-2553/? E/classes﹕ [ 09-17 15:05:10.640 2535: 2553 E/endElement ] endElement 09-17 15:05:10.640 2535-2553/? E/characters﹕ characters 09-17 15:05:10.640 2535-2553/? E/classes﹕ [ 09-17 15:05:10.640 2535: 2553 E/characters ] characters 09-17 15:05:10.640 2535-2553/? E/classes﹕ [ 09-17 15:05:10.640 2535: 2553 E/startElement ] startElement 09-17 15:05:10.640 2535-2553/? E/user_id﹕ 2 09-17 15:05:10.640 2535-2553/? E/characters﹕ characters 09-17 15:05:10.640 2535-2553/? E/characters﹕ characters 09-17 15:05:10.640 2535-2553/? E/startElement﹕ startElement 09-17 15:05:10.640 2535-2553/? E/characters﹕ characters 09-17 15:05:10.640 2535-2553/? E/name﹕ 张 09-17 15:05:10.641 2535-2553/? E/endElement﹕ endElement 09-17 15:05:10.641 2535-2553/? E/characters﹕ characters 09-17 15:05:10.641 2535-2553/? E/name﹕ [ 09-17 15:05:10.641 2535: 2553 E/characters ] characters 09-17 15:05:10.641 2535-2553/? E/name﹕ [ 09-17 15:05:10.641 2535: 2553 E/startElement ] startElement 09-17 15:05:10.641 2535-2553/? E/characters﹕ characters 09-17 15:05:10.641 2535-2553/? E/sex﹕ 男 09-17 15:05:10.641 2535-2553/? E/endElement﹕ endElement 09-17 15:05:10.641 2535-2553/? E/characters﹕ characters 09-17 15:05:10.641 2535-2553/? E/sex﹕ [ 09-17 15:05:10.641 2535: 2553 E/characters ] characters 09-17 15:05:10.641 2535-2553/? E/sex﹕ [ 09-17 15:05:10.642 2535: 2553 E/startElement ] startElement 09-17 15:05:10.642 2535-2553/? E/characters﹕ characters 09-17 15:05:10.642 2535-2553/? E/classes﹕ 3 09-17 15:05:10.642 2535-2553/? E/endElement﹕ endElement 09-17 15:05:10.642 2535-2553/? E/characters﹕ characters 09-17 15:05:10.642 2535-2553/? E/classes﹕ [ 09-17 15:05:10.642 2535: 2553 E/characters ] characters 09-17 15:05:10.642 2535-2553/? E/classes﹕ [ 09-17 15:05:10.642 2535: 2553 E/endElement ] endElement 09-17 15:05:10.642 2535-2553/? E/characters﹕ characters 09-17 15:05:10.642 2535-2553/? E/classes﹕ [ 09-17 15:05:10.643 2535: 2553 E/characters ] characters 09-17 15:05:10.643 2535-2553/? E/classes﹕ [ 09-17 15:05:10.643 2535: 2553 E/startElement ] startElement 09-17 15:05:10.643 2535-2553/? E/user_id﹕ 3 09-17 15:05:10.643 2535-2553/? E/characters﹕ characters 09-17 15:05:10.643 2535-2553/? E/characters﹕ characters 09-17 15:05:10.643 2535-2553/? E/startElement﹕ startElement 09-17 15:05:10.643 2535-2553/? E/characters﹕ characters 09-17 15:05:10.643 2535-2553/? E/name﹕ 李四 09-17 15:05:10.643 2535-2553/? E/endElement﹕ endElement 09-17 15:05:10.643 2535-2553/? E/characters﹕ characters 09-17 15:05:10.643 2535-2553/? E/name﹕ [ 09-17 15:05:10.643 2535: 2553 E/characters ] characters 09-17 15:05:10.643 2535-2553/? E/name﹕ [ 09-17 15:05:10.643 2535: 2553 E/startElement ] startElement 09-17 15:05:10.643 2535-2553/? E/characters﹕ characters 09-17 15:05:10.643 2535-2553/? E/sex﹕ 男 09-17 15:05:10.643 2535-2553/? E/endElement﹕ endElement 09-17 15:05:10.643 2535-2553/? E/characters﹕ characters 09-17 15:05:10.643 2535-2553/? E/sex﹕ [ 09-17 15:05:10.643 2535: 2553 E/characters ] characters 09-17 15:05:10.643 2535-2553/? E/sex﹕ [ 09-17 15:05:10.644 2535: 2553 E/startElement ] startElement 09-17 15:05:10.644 2535-2553/? E/characters﹕ characters 09-17 15:05:10.644 2535-2553/? E/classes﹕ 2 09-17 15:05:10.644 2535-2553/? E/endElement﹕ endElement 09-17 15:05:10.644 2535-2553/? E/characters﹕ characters 09-17 15:05:10.644 2535-2553/? E/classes﹕ [ 09-17 15:05:10.644 2535: 2553 E/characters ] characters 09-17 15:05:10.644 2535-2553/? E/classes﹕ [ 09-17 15:05:10.644 2535: 2553 E/endElement ] endElement 09-17 15:05:10.644 2535-2553/? E/characters﹕ characters 09-17 15:05:10.644 2535-2553/? E/classes﹕ [ 09-17 15:05:10.644 2535: 2553 E/characters ] characters 09-17 15:05:10.644 2535-2553/? E/classes﹕ [ 09-17 15:05:10.644 2535: 2553 E/startElement ] startElement 09-17 15:05:10.644 2535-2553/? E/user_id﹕ 4 09-17 15:05:10.644 2535-2553/? E/characters﹕ characters 09-17 15:05:10.644 2535-2553/? E/characters﹕ characters 09-17 15:05:10.644 2535-2553/? E/startElement﹕ startElement 09-17 15:05:10.644 2535-2553/? E/characters﹕ characters 09-17 15:05:10.644 2535-2553/? E/name﹕ 王 09-17 15:05:10.644 2535-2553/? E/endElement﹕ endElement 09-17 15:05:10.644 2535-2553/? E/characters﹕ characters 09-17 15:05:10.644 2535-2553/? E/name﹕ [ 09-17 15:05:10.644 2535: 2553 E/characters ] characters 09-17 15:05:10.644 2535-2553/? E/name﹕ [ 09-17 15:05:10.644 2535: 2553 E/startElement ] startElement 09-17 15:05:10.644 2535-2553/? E/characters﹕ characters 09-17 15:05:10.644 2535-2553/? E/sex﹕ 女 09-17 15:05:10.644 2535-2553/? E/endElement﹕ endElement 09-17 15:05:10.644 2535-2553/? E/characters﹕ characters 09-17 15:05:10.645 2535-2553/? E/sex﹕ [ 09-17 15:05:10.645 2535: 2553 E/characters ] characters 09-17 15:05:10.645 2535-2553/? E/sex﹕ [ 09-17 15:05:10.645 2535: 2553 E/startElement ] startElement 09-17 15:05:10.645 2535-2553/? E/characters﹕ characters 09-17 15:05:10.645 2535-2553/? E/classes﹕ 2 09-17 15:05:10.645 2535-2553/? E/endElement﹕ endElement 09-17 15:05:10.645 2535-2553/? E/characters﹕ characters 09-17 15:05:10.645 2535-2553/? E/classes﹕ [ 09-17 15:05:10.645 2535: 2553 E/characters ] characters 09-17 15:05:10.645 2535-2553/? E/classes﹕ [ 09-17 15:05:10.645 2535: 2553 E/endElement ] endElement 09-17 15:05:10.645 2535-2553/? E/characters﹕ characters 09-17 15:05:10.645 2535-2553/? E/classes﹕[ 09-17 15:05:10.645 2535: 2553 E/characters ] characters 09-17 15:05:10.645 2535-2553/? E/classes﹕ [ 09-17 15:05:10.645 2535: 2553 E/startElement ] startElement 09-17 15:05:10.645 2535-2553/? E/user_id﹕ 5 09-17 15:05:10.645 2535-2553/? E/characters﹕ characters 09-17 15:05:10.645 2535-2553/? E/characters﹕ characters 09-17 15:05:10.645 2535-2553/? E/startElement﹕ startElement 09-17 15:05:10.645 2535-2553/? E/characters﹕ characters 09-17 15:05:10.645 2535-2553/? E/name﹕ 道 09-17 15:05:10.645 2535-2553/? E/endElement﹕ endElement 09-17 15:05:10.645 2535-2553/? E/characters﹕ characters 09-17 15:05:10.645 2535-2553/? E/name﹕ [ 09-17 15:05:10.645 2535: 2553 E/characters ] characters 09-17 15:05:10.645 2535-2553/? E/name﹕ [ 09-17 15:05:10.645 2535: 2553 E/startElement ] startElement 09-17 15:05:10.646 2535-2553/? E/characters﹕ characters 09-17 15:05:10.646 2535-2553/? E/sex﹕ 男 09-17 15:05:10.646 2535-2553/? E/endElement﹕ endElement 09-17 15:05:10.646 2535-2553/? E/characters﹕ characters 09-17 15:05:10.646 2535-2553/? E/sex﹕ [ 09-17 15:05:10.646 2535: 2553 E/characters ] characters 09-17 15:05:10.646 2535-2553/? E/sex﹕ [ 09-17 15:05:10.646 2535: 2553 E/startElement ] startElement 09-17 15:05:10.646 2535-2553/? E/characters﹕ characters 09-17 15:05:10.646 2535-2553/? E/classes﹕ 1 09-17 15:05:10.646 2535-2553/? E/endElement﹕ endElement 09-17 15:05:10.646 2535-2553/? E/characters﹕ characters 09-17 15:05:10.646 2535-2553/? E/classes﹕ [ 09-17 15:05:10.646 2535: 2553 E/characters ] characters 09-17 15:05:10.646 2535-2553/? E/classes﹕ [ 09-17 15:05:10.646 2535: 2553 E/endElement ] endElement 09-17 15:05:10.647 2535-2553/? E/characters﹕ characters 09-17 15:05:10.647 2535-2553/? E/classes﹕ [ 09-17 15:05:10.647 2535: 2553 E/characters ] characters 09-17 15:05:10.647 2535-2553/? E/classes﹕ [ 09-17 15:05:10.648 2535: 2553 E/characters ] characters 09-17 15:05:10.648 2535-2553/? E/classes﹕ [ 09-17 15:05:10.648 2535: 2553 E/characters ] characters 09-17 15:05:10.648 2535-2553/? E/classes﹕ [ 09-17 15:05:10.649 2535: 2553 E/endElement ] endElement 09-17 15:05:10.649 2535-2553/? E/endDocument﹕ endDocument
对比以下Document解析,你有没有发现一点东西?
SAX 是逐行从上往下解析的,变扫描边解析。而document解析则是将整个XML文本读取扫描完毕,在从外往里一层一层的解析。
聪明的人就会想到,这样的话,我利用SAX解析,解析达到一定的条件,终止解析XML数据,这样就会简单很多了吧。对的。怎么方法类中断呢?
查看上面的解析结果,发现endDocument()是调用一次,可不可以到达特定的条件时候,调用该方法类终止解析呢?还有一种也可以使用return 来终止解析,是否可以呢?这两个都是不行的。
不知道有没有发现DefaultHandler子类的复写方法都会抛异常, 我们只要在解析达到特定的条件时候,抛异常就OK了
在调用解析方法出捕获一下异常
try{ //XMLReader 与创建DefaultHandler子类关联(DefaultHandler注册到XMLReader) xmlReader.setContentHandler(new XMLHandlers()); //开始解析,InputStream为从本地读取XML文件获得的InputStream // 或者是从web上获取的InputStream xmlReader.parse(new InputSource(inputStream)); }catch (SAXException e){ //TODO去干中断解析的工作吧 //…… }
在characters()方法解析数据出等到达到特定条件就抛异常
if (localName.equals("name")) { name = new String(ch, start, length); Log.e("name", name); if (name.equals("gaosi")){ super.endDocument(); throw new SAXException("中断扫描,解析完成"); } }
看一下区别:
总结:
在Android平台中,SAX解析更符合用户的而需求,不仅是简单,耗能少,耗时也少,内存需求少等
相关推荐
XML Pull解析器是基于事件驱动的解析方式,它会触发一系列事件(如开始标签、结束标签、文本数据等),开发者可以注册监听这些事件,从而实现对XML文档的解析。这种方式既节省内存又提高效率,特别适合处理大型XML...
以上就是“Android解析XML并使用WebView显示”的主要技术点,开发者需要理解并掌握这些知识点,才能在实际项目中顺利实现这一功能。通过不断实践和学习,我们可以更好地理解和运用这些工具,提升应用的质量和用户...
Pull 解析器是 Android 中的一种内置解析器,它可以将 XML 文件解析为一系列事件,然后使用回调函数处理这些事件。Pull 解析器的优点是它可以处理大型 XML 文件,并且可以实时处理 XML 文件。 使用 Pull 解析器可以...
DOM解析器读取XML文件并构建一个内存中的节点树,其中每个元素、属性、文本等都对应一个节点。在Android中,我们通常使用`javax.xml.parsers.DocumentBuilderFactory`来创建解析器,并通过`DocumentBuilder`实例解析...
2. SAX解析:Simple API for XML(SAX)是事件驱动的解析器,它按顺序读取XML文档,逐个触发事件。这种方式内存效率高,适合处理大文件,但编程相对复杂,需要编写事件处理器。 3. Pull解析:Pull解析器是SAX解析的...
本文将深入探讨如何在Android中使用Pull解析器解析XML文件。 一、XML Pull解析器简介 XML Pull解析器(XML Pull API)是一种基于事件驱动的解析模型,它不需预先加载整个XML文档,而是逐行读取,当遇到特定的XML...
本文将深入探讨如何在Android中使用Pull解析器来处理XML文件,这是一种高效且节省资源的方式。 Pull解析器是Android提供的一个API,它允许应用程序通过事件驱动的方式解析XML文档。与SAX解析器类似,Pull解析器不...
XML Pull解析是Android开发中处理XML数据的一种高效方式,它允许开发者通过事件驱动的模型来解析XML文档。在Android Studio中,使用XML Pull解析器可以帮助我们更有效地读取和处理XML内容,尤其对于大型XML文件,...
理解如何解析XML文件是至关重要的,本节将深入探讨Android中的三种XML解析方法:SAX、DOM和Pull解析。 **SAX解析** SAX(Simple API for XML)是一种基于事件驱动的解析方式,它不加载整个XML文档到内存,而是逐行...
学习XML解析的关键在于理解XML结构,熟悉解析器的工作原理,以及掌握如何在Android中使用解析器API来读取和操作XML数据。对于开发者来说,能够有效地解析和生成XML文档,不仅可以优化应用性能,还能提高代码的可维护...
1. 布局解析:Android系统使用DOM解析XML布局文件,构建View层次结构。 2. 资源文件:如字符串、颜色、尺寸等资源,通过DOM或Android的Resource类进行解析。 3. 配置文件:如AndroidManifest.xml,系统使用DOM解析以...
5. 开始解析:最后,使用`XMLReader.parse(InputSource source)`方法开始解析XML数据。`InputSource`对象表示XML数据的来源,可以是文件、字符串或其他输入流。 以下是`MainActivity.java`中的关键代码片段,展示了...
### Android XML 解析知识点详述 #### 前言 在Android开发中,XML(可扩展标记语言)是一种常见的数据格式,特别是在不同平台之间进行数据交换时。由于XML具有跨平台的特点,它被广泛应用于数据通信领域。Android...
本篇文章将深入探讨Android中的DOM解析XML文件,包括其基本原理、实现步骤和一些实用技巧。 ### 1. DOM解析的基本概念 DOM解析是一种将XML文件转换为内存中对象模型的方法。它将XML文档视为一棵树,其中每个元素、...
在Android平台上,XML(eXtensible Markup ...在提供的压缩包文件"AndroidXml"中,可能包含了一个简单的Android项目,演示了上述的XML解析过程。你可以通过运行这个示例来更深入地理解Android中XML在线解析的实现。
4. 开始解析:进入事件循环,不断调用`next()`方法,直到解析完整个XML文档。根据返回的事件类型,执行相应的操作。主要的事件类型包括`START_DOCUMENT`、`START_TAG`、`END_TAG`、`TEXT`等。 ```java int eventType...
SAX解析器是基于事件驱动的解析模型,它逐行读取XML文档,遇到元素、属性、文本等时触发相应的事件回调。这种解析方式适用于大型XML文件,因为它占用的内存较少,但需要编写更多的代码来处理事件。SAX解析的基本步骤...
### Android实例:解析XML文件 #### 一、引言 在Android开发中,解析XML文件是一项常见的需求。本文将详细介绍如何使用SAX(Simple API for XML)解析器来解析XML文件,并通过一个具体的实例来进行说明。 #### 二...
例如,从一个字符串输入源解析: ```java parser.setInput(new StringReader(xmlString)); ``` 3. **解析过程** 解析过程包括以下几个关键步骤: - 获取事件类型:使用`parser.getEventType()`方法,返回值可能...
这个项目可能包含了本地XML文件的读取和网络XML数据的下载与解析,供开发者学习参考。你可以通过查看源代码,了解如何在实际应用中集成XML Pull解析。 总结,XML Pull解析在Android开发中是一个重要的数据处理技术...