android 三种解析,构建xml方法



 package com.zyq.service;

import java.io.OutputStream;

import java.util.List;

import org.xmlpull.v1.XmlSerializer;

import android.util.Xml;

import com.zyq.voo.Person;

/**

 * 采用PULL  生成XML数据

 * @author Administrator

 *

 */

public class PullBuildXMLService

{

       /**

        *

        * @param persons

        * @param outputStream

        * @throws Exception

        */

       public void buildXML(List<Person> persons,OutputStream outputStream) throws Exception

       {

              XmlSerializer serializer=Xml.newSerializer();

              serializer.setOutput(outputStream, "utf-8"); //转码

             

              serializer.startDocument("utf-8", true);

              serializer.startTag(null, "persons");

             

              for(Person person:persons)

              {

                     serializer.startTag(null, "person");

                     serializer.attribute(null, "id", person.getId().toString());

                    

                     serializer.startTag(null, "name");

                     serializer.text(person.getName());

                     serializer.endTag(null, "name");

                    

                     serializer.startTag(null, "age");

                     serializer.text(person.getAge().toString());

                     serializer.endTag(null, "age");

                    

                     serializer.endTag(null, "person");

              }

             

              serializer.endTag(null, "persons");

              serializer.endDocument();

              outputStream.close();

       }

}

 

打开的结果:

 

 

 

采用官方PULL解析器解析XML数据

package com.zyq.service;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.List;

import org.xmlpull.v1.XmlPullParser;

import android.util.Xml;

import com.zyq.voo.Person;

/**

 * 采用官方PULL解析器解析XML数据

 * @author Administrator

 *

 */

public class PullPersonService

{

       /**

        * 采用官方PULL解析器解析XML数据

        * @param inputStream person.xml

        * @return persons List集合

        * @throws Throwable

        */

       public List<Person> getPersons(InputStream inputStream) throws Throwable

       {

              List<Person> persons=null;

              Person person=null;

              XmlPullParser parser=Xml.newPullParser();

              parser.setInput(inputStream, "utf-8");

              int event=parser.getEventType();

             

              while(event!=XmlPullParser.END_DOCUMENT)

              {

                     switch (event)

                     {

                            case XmlPullParser.START_DOCUMENT:

                                  

                                   persons=new ArrayList<Person>();

                                  

                                   break;

                            case XmlPullParser.START_TAG:

                                  

                                   if("person".equals(parser.getName()))

                                   {

                                          person=new Person();

                                          Integer id=new Integer(parser.getAttributeValue(0));

                                          person.setId(id);

                                   }

                                   if(person!=null)

                                   {

                                          if("name".equals(parser.getName()))

                                          {

                                                 String name=parser.nextText().toString();

                                                 person.setName(name);

                                          }

                                          else if("age".equals(parser.getName()))

                                          {

                                                 Short age=new Short(parser.nextText().toString());

                                                 person.setAge(age);

                                          }

                                   }

                                   break;

                           

                            case XmlPullParser.END_TAG:

                                  

                                   if("person".equals(parser.getName()))

                                   {

                                          persons.add(person);

                                          person=null;

                                   }

                                  

                                   break;

                                  

                            default:

                                   break;

                     }

                     event=parser.next();

              }

              return persons;

       }

}

 

 

通过dom创建一个xml文件

package com.domxmltest;

 

import java.io.File;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.transform.OutputKeys;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

 

public class CreateXML {

public static void main(String[] args) {

Document doc;

//声明xml文档中的各个元素对象

Element students,student;

Element name=null;

Element address=null;

Element tel=null;

Element email=null;

 

try{

//得到dom解析器的工厂实例

DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

//从dom工厂实例获得dom解析器

DocumentBuilder builder=factory.newDocumentBuilder();

//创建文档树模型对象

doc=builder.newDocument();

//如果创建的文档树模型不为空

if(null!=doc){

//创建students元素

students=doc.createElement(“students”);

//创建student元素

student=doc.createElement(“student”);

//设置student元素的属性id的值为95003

student.setAttribute(“id”, “95003″);

//将student元素添加为students的子元素

students.appendChild(student);

//创建name元素

name=doc.createElement(“name”);

//将一个文本结点添加为name元素的子结点

name.appendChild(doc.createTextNode(“Mr. Zhang”));

//将name元素添加为student的子元素

student.appendChild(name);

address=doc.createElement(“address”);

address.appendChild(doc.createTextNode(“Shangdong Qingdao”));

student.appendChild(address);

tel=doc.createElement(“tel”);

tel.appendChild(doc.createTextNode(“(0532)888888″));

student.appendChild(tel);

email=doc.createElement(“email”);

email.appendChild(doc.createTextNode(“xy21@xy21.info”));

student.appendChild(email);

//将students元素作为根元素添加到xml文档树中

doc.appendChild(students);

//将内存中的文档树保存为students.xml文档

Transformer transformer=TransformerFactory.newInstance().newTransformer();//得到转换器

//设置换行

transformer.setOutputProperty(OutputKeys.INDENT, “yes”);

//写入文件

transformer.transform(new DOMSource(doc), new StreamResult(new File(“d:/student.xml”)));

}

}catch (Exception e) {

e.printStackTrace();

}

}

}

 

 

采用DOM完成XML的解析

package com.zyq.service;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.List;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

import com.zyq.voo.Person;

/**

 * 采用DOM完成XML的解析

 * @author Administrator

 *

 */

public class DOMPersonService

{

       /**

        * DOM 解析person.xml

        * @param inputStream person.xml数据

        * @return persons

        * @throws Exception

        */

       public List<Person> getPersons(InputStream inputStream) throws Exception

       {

              List<Person> persons=new ArrayList<Person>();

              DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

              DocumentBuilder builder=factory.newDocumentBuilder();

              Document document=builder.parse(inputStream);

              Element element=document.getDocumentElement();

              NodeList nodeList=element.getElementsByTagName("person");

              for(int i=0;i<nodeList.getLength();i++)

              {

                     Element personNode=(Element)nodeList.item(i);

                     Integer id=new Integer(personNode.getAttribute("id"));

                     Person person=new Person();

                     person.setId(id);

                    

                     NodeList childNodes=personNode.getChildNodes();

                     for(int j=0;j<childNodes.getLength();i++)

                     {

                            if(childNodes.item(j).getNodeType()==Node.ELEMENT_NODE)

                            {

                                   if("name".equals(childNodes.item(j).getNodeName()))

                                   {

                                          String name=childNodes.item(j).getFirstChild().getNodeName();

                                          person.setName(name);

                                   }

                                   else if("age".equals(childNodes.item(j).getNodeName()))

                                   {

                                          Short age=new Short(childNodes.item(j).getFirstChild().getNodeName());

                                          person.setAge(age);

                                   }

                            }

                     }

                     persons.add(person);

              }

             

              return persons;

       }

}

 

SAX解析person.xml

package com.zyq.service;

import java.io.InputStream;

import java.util.ArrayList;

import java.util.List;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

import com.zyq.voo.Person;

public class SAXPersonService

{

       /**

        * SAX解析person.xml

        * @param inputStream  person.xml数据

        * @return persons

        * @throws Throwable

        */

       public List<Person> getPersons(InputStream inputStream) throws Throwable

       {

              SAXParserFactory factory=SAXParserFactory.newInstance();

              SAXParser parser=factory.newSAXParser();

              PersonHandel personHandel=new PersonHandel();

              parser.parse(inputStream, personHandel);

             

              return personHandel.getPersons();

       }

      

       private class PersonHandel extends DefaultHandler

       {

              private List<Person> persons;

              private String preTAG;

              private Person person;

             

              public List<Person> getPersons()

              {

                     return persons;

              }

              @Override

              public void characters(char[] ch, int start, int length)

                            throws SAXException

              {

                     if(preTAG!=null)

                     {

                            String data=new String(ch, start, length);

                            if("name".equals(preTAG))

                            {

                                   person.setName(data);

                            }

                            else if("age".equals(preTAG))

                            {

                                   person.setAge(new Short(data));

                            }

                     }

              }

              @Override

              public void startElement(String uri, String localName, String qName,

                            Attributes attributes) throws SAXException

              {

                     if("person".equals(localName))

                     {

                            person=new Person();

                            Integer id= new Integer(attributes.getValue(0));

                            person.setId(id);

                     }

                     preTAG=localName;

              }

             

              @Override

              public void startDocument() throws SAXException

              {

                     persons=new ArrayList<Person>();

              }

             

              @Override

              public void endElement(String uri, String localName, String qName)

                            throws SAXException

              {

                     if("person".equals(localName))

                     {

                            persons.add(person);

                            person=null;

                     }

                    

                     preTAG=null;

              }

             

       }

}

 

Android XML文件读取解析三种方式 XML文件读取解析 阅读详情

相关推荐

Android开发中解析与生成XML的方法详解

SAX(Simple API for XML)解析器是一种基于事件驱动的XML解析技术。与DOM解析器不同,SAX不将整个文档加载到内存中,而是以流的形式读取XML文档,边读边处理。这意味着对于大型文档,SAX可以更加高效地使用内存,从而在处理大文件时具有优势。SAX通过定义一系列表事件处理方法来实现,例如:开始文档、开始元素、字符数据、结束元素和结束文档等。当解析器在XML文档中遇到这些结构时,会触发相应的事件,并调用用户定义的方法来处理这些事件。

weixin_35835018的博客 781

Android XML解析学习——创建XML .

一.基础知识 在前面的学习过程中,我们基本上比较全面的学习了Android平台上读取XML文档的方法,介绍了使用Java SAX、Android SAX、DOM和Pull等各种方式来读取XML文档内容。 目前为止,我们一直专注于解析已有的XML文档,实际上我们也是需要读XML的情形比较多。但是我们可能也有写XML的需要,应用程序可能需要将 XML 发送到远程服务器,或者需要以XML的形式保存数

zhouzhiwengang的专栏 1815

Android XML数据解析实践:使用SAX解析器

本文还有配套的精品资源,点击获取 简介:本教程深入介绍Android平台下使用SAX解析XML数据的方法,强调其在处理大量数据时内存效率高的特点。通过实例化XML解析器,实现ContentHandler接口以及解析XML文件,本教程展示了如何高效集成XML数据到Android应用,并进行业务逻辑处理。源码项目同时涉及代码结构组织和性能优化,旨在通过实例帮助开发者提升XML处...

weixin_35677363的博客 1710

【为Android 应用创建 XML 布局】

XML(可扩展标记语言)是一种整理文本的方式,由标记、元素和属性组成。使用 XML 可定义 Android 应用的布局。使用EditText可支持用户输入或修改文本。EditText会生成一条提示,告知用户应在相应字段内输入什么内容。指定属性可限制用户在EditText字段输入哪种类型的文本。使用可创建一个互斥选项列表,并使用RadioGroup进行分组。RadioGroup可以垂直排列,也可以水平排列,并且您可以指定最初选中的应该是哪个。使用Switch可让用户在两个选项之间切换。...

Jasonhso的博客 3567

Android中使用SAXReader高效解析XML

XML解析是指从XML文档中提取信息的过程。在Android中,主要有以下几种解析XML的方法:DOM解析(Document Object Model):把整个XML文档加载到内存中,然后通过DOM API以树形结构进行访问。SAX解析(Simple API for XML):采用基于事件的模型,边读取XML文档边处理数据。Pull解析:类似于SAX,也是一个基于事件的解析器,但它提供了更多的控制权给开发人员。

weixin_27645199的博客 1010

第十五届蓝桥杯省赛C/C++B组H题【拔河】题解(AC)

由于枚举三个点肯定会超时,所以只能枚举两个点,我们尝试枚举第一个区间。的复杂度,需要找出右区间中和左区间的和最相近的值,可以考虑使用。一开始,我们将所有可能的右区间的区间和,都插入。做法同上,用前缀和优化数组求和的过程。的数组和差值最小是多少,其中。递增进行枚举左区间,当。的数组,求两个子数组。为左端点的区间的和。

一只大采集~ 5283

android xml如何创建,android中创建XML

在android中创建XML文档只需要一个接口XMLSerializer,使用该接口中的方法就可以轻松的创建XML文档。在这个接口中定义了操作XML需要的各种方法。1.setOutput():设置文件的写出地址2.startDocument(String encoding,boolean standalong):向文件中写头,并且指定编码方式和是否是standalong.3.startTag(St...

weixin_42165490的博客 1396

最简解决 Unity Error Registry configuration is invalid Unable to connect https packages.unity.cn

前言 在学习其他大佬项目的时候,大佬说项目能直接运行,然后我拉下来就报如下错误 Unity报错:[Package Manager]Error Registry configuration is invalid:Unable to connect “https://packages.unity.cn” 翻了很多博发现是 unity3d 中国增强版的原因,中国增强版屏蔽了国外自定义的插件仓库。 安装 非中国增强版后可以成功打开。 然后大家给出的解决方案都比较激进,大抵就是更换Unity版本就OK了。 当然我是觉

Gipsyz的博客 6842

Android创建XMl文件

 /*生成xml格式字符串*/public String WriteXmlStr(){ XmlSerializer serializer = Xml.newSerializer(); StringWriter writer = new StringWriter(); try { serializer.setOutput(writer); serializer.s

fontlose的专栏 7644

【AI 编程工具进阶用法】如何在Cursor、Trae等工具中使用Skills

OpenSkills是一个开源项目,用于在Cursor、Trae等AI编程工具中添加可复用、可组合的"能力模块"。安装流程包括:1)全局安装OpenSkills CLI工具;2)选择安装Anthropic官方Skills到项目或全局;3)创建AGENTS.md文件同步Skills;4)在AI工具中调用Skills。此外还介绍了UI/UX Pro Max Skill项目,通过npm安装后可为AI添加设计能力。这些Skills相当于为AI工具安装"高级技能包"

肌肉金轮的博客 3545

C语言版数字锁相放大器实现指南:从复数运算到嵌入式MCU移植的坑我都帮你踩了

本文详细介绍了C语言实现数字锁相放大器的关键技术,包括复数运算优化、嵌入式MCU移植的实战经验及内存管理策略。针对STM32等资源受限平台,提供了从浮点到定点数转换的优化方案,帮助工程师高效处理微弱信号提取问题。

weixin_30721077的博客 432

Android 上的 XML

在后续小节中,我们将以 Internet 上的一个简单的 XML 源为例,来看看如何在 Android 应用程序中使用上述各种 API 来解析它。大多数时间,使用 SAX 是比较安全的,并且 Android 提供了一种传统的 SAX 使用方法,以及一个便捷的 SAX 包装器。如果您的文档比较大,但您只需要文档的一部分,则 XML Pull 解析器可能是更为有效的方法。在本文中,您将了解在 Android 上使用 XML 的不同方法,以及如何使用它们构建自己的 Android 应用程序。

qq_61141142的博客 147

Spine动画在Unity里卡顿、闪烁、排序错乱?这些性能优化与渲染问题一次讲清

本文深入解析了Spine动画在Unity中常见的卡顿、闪烁和排序错乱问题,提供了全面的性能优化与渲染解决方案。从性能瓶颈诊断到材质合并、动态合批优化,再到层级错乱与Alpha闪烁的处理,帮助开发者提升动画表现和运行效率。特别针对Unity和Spine的协同工作进行了详细的技术探讨。

weixin_29967445的博客 380

android中SAX解析xml

andorid读取xml文件内容方法有三种 sax dom pull,其中 pull是android自带的1.先认识一下xml文件中的些术语Xml代码<?xml version="1.0" encoding="UTF-8"?><persons> <person id="23"> <name>李明</...

weixin_33729196的博客 121

Cube生成定时器2触发双ADC同步采集并用DMA传输

前言 用cube生成一个用定时器触发ADC1,ADC2同步采集的程序,单片机选择的是STM32L476RGT6,用定时器2进行ADC采集触发,更改定时器2的定时周期便可以更改ADC的采样周期,ADC1和ADC2使用同步规则模式,并用DMA进行数据的传输。 STM32的ADC采样完成总共需要的时间是 ADC完成采样时间=采样周期+12个转换周期 举个例子,假如ADC的时钟是15MHz,采样周期是3个周期,3个采样周期加上12个转换周期,一共是15个周期,因为时钟是15MHz,所以完成一次ADC转换总共需要的时

一行代码的博客 4513

YOLOv13改进策略【注意力机制篇】| ICASSP 2023 EMA 高效多尺度注意力,跨空间学习提高远距离建模依赖

ICASSP 2023 EMA 高效多尺度注意力在 YOLOv13 的接入实战:跨空间学习提升远距离依赖建模,含原理图解、完整代码、yaml 配置与实测参数量对比(ultralytics 8.3.63)。

qq_53329130的博客 934

Android Basic-xml的数据读取及保存

在Android中,常见的XML解析器分别为DOM解析器、SAX解析器和PULL解析器。 1.DOM解析器: DOM是基于树形结构的的节点或信息片段的集合,允许开发人员使用DOM API遍历XML树、检索所需数据。分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息。Android完全支持DOM 解析。利用DOM中的对象,可以对XML文档进行读取、搜索、修改、添加和删除等...

weixin_30553777的博客 130

2026华为OD面试手撕代码真题目录

一般面试的时候每一轮技术面都会出一到两个手撕代码题,这些题的特点就是,非常短小,易于理解。不可能会再出阅读理解一样的机试题的。但是这些题目也非常注意基本功,很注意细节的处理,一般都是easy+medium题目。但是大家一定要注意,因为大部分面试官上面一开始就会让你做题,直接看你所有的做题过程(防止有人水平一般,机试就网上找的答案的蒙混过关),手撕代码题会给你后面的面试定一个基调。

MISAYAONE的博客 9万+

Android中XML构建与解析

1、引言 要学

ljtyzhr的专栏 821

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android XML数据解析

Android XML数据解析方法主要包括SAX、DOM和XmlPullParser三种方式。SAX基于事件驱动,适合大文件但代码复杂;DOM构建内存树结构,支持读写但占用内存高;XmlPullParser是Android推荐方式,轻量灵活。解析XML前需配置网络权限,数据可来自网络请求或本地文件。示例展示了SAX解析的实现步骤:创建SAXParser、定义事件处理逻辑并解析输入流。DOM解析则通过DocumentBuilder构建树形结构进行数据提取。开发者可根据需求选择适合的解析方法,注意处理异常和内存

m0_57545130的博客 1158

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android 解析xml 文件

xml 文件在各种开发中都广泛应用.Android中也不例外.作为承载数据的一个重要角色.如何读写xml成为一项十分重要的技能. 在Android中,常见的xml解析器分为DOM解析器,SAX解析器,PULL解析器. 将该xml文件放置在assets目录中. <?xml version="1.0" encoding="utf-8"?> <persons> &...

xujian197的博客 5738

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

4.1 解析 XML 数据的三种方式详解

点此进入:从零快速构建APP系列目录导图点此进入:UI编程系列目录导图点此进入:四大组件系列目录导图点此进入:数据网络和线程系列目录导图 通常情况下,每个需要访问网络的应用程序都会有一个自己的服务器,我们可以向服务器提交数据,也可以从服务器上获取数据。不过这个时候就出现了一个问题,这些数据到底要以什么样的格式在网络上传输呢?随便传递一段文本肯定是不行的,因为另一方根本就不会知道这段文本的用途是什

WillFlow的博客 2108

Android实现解析XML文件

本文介绍在Android平台中实现对XML的三种解析方式。   XML在各种开发中都广泛应用,Android也不例外。作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能。   在Android中,常见的XML解析器分别为DOM解析器、SAX解析器和PULL解析器,下面,我将一一向大家详细介绍。   第一种方式:DOM解析器: DOM是基于树形结构的的节点或信

路遥知马力 1019

xmlpullparser解析xml android,XML的XmlPullParser解析

xml文件的解析有三种方式:DOM(document object model :文档对象模型):借助文档树模型对 xml 文档进行分析SAX(simple API for xml :xml 的简单 api):利用事件流的形式解析 XMLPULL:利用事件流模型来解析 XML备注:DOM 和 SAX 解析的优劣分析:DOM 是将文档一次性读入到内存,然后以文档树模进行分析节点信息。获取到希望获...

weixin_32973319的博客 734

XML解析(一),SAX解析XML

一、概述 SAX,全称Simple API for XML,是一种以事件驱动的XMl API,是XML解析的一种新的替代方法,解析XML常用的还有DOC解析,PULL解析(Android特有),SAX与DOC不同的是它边扫描边解析,自顶向下依次解析,由于边扫描边解析,所以它解析XML具有速度快,占用内存少的优点,对于Android等CPU资源宝贵的移动平台来说是一个巨大的优势。 SAX的优点:解析速

宿罪的博客 3万+

Android XML解析学习——Dom方式

一.基础知识在《Android XML解析学习——Sax方式》和《Android XML解析学习——Sax方式(续)》中我们学习了在Android 平台上使用SAX的方式解析XML文档的方法。除了SAX的方式,还有一种常用的为DOM(Document Object Model文档对象模型)方式。DOM方式解析XML的过程为首先将所有 XML 文档读取到内存中,构造一个树结构,然后允许使用 DOM API 来操作整个树结构,包括遍历 XML 树、检索所需的数据等。Android平台使用Java SDK中的AP

ichliebephone的专栏 1万+
下一篇: android 报错集锦
Li Chuan
博客等级 码龄14年 0粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值