Xml格式数据的生成和解析的代码详情
1. Xml格式数据的生成和解析
使用xml 作为数据交互的载体是Android中非常重要的功能,比如天气预报数据、短信备份数据、讯录数据都可以以xml
的格式通过网络传输。
XML的格式通过便签的形式书写和展示,一目了然,方便阅读和识别,如下所示:
<xml 头> <student> <name>张三</name> <number>110001</number> <sex>male</sex> </student>
XML的生成
如果用java代码去实现这样的一个字符串格式,可以使用到StringBuilder来进行组拼:StringBuilder sb = new StringBuilder();
//数据保存到文件 sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); sb.append("<student>"); sb.append("<name>"); sb.append(name); sb.append("</name>"); sb.append("<number>"); sb.append(number); sb.append("</number>"); sb.append("<sex>"); sb.append(sex); sb.append("</sex>"); sb.append("</student>");
上面的代码虽然也可以生成xml
文件,但是无法对特殊字符进行处理,比如如果短信内容包含“>”符号,那么xml
解析器就无法完成正确的解析。因此使用的前提是你确定数据内容没有特殊字符。
而Android为我们提供了一个专门用于生成XML数据的API:XmlSerializer, 该api
内部已经实现了对特殊字符的处理,代码如下:
try {// 采用Android的api面向对象的生成xml文件. // 1.得到xml文件的序列化器 XmlSerializer serializer = Xml.newSerializer(); // 2.指定序列化器的一些初始参数 File file = new File(getFilesDir(), name +".xml"); FileOutputStream os = new FileOutputStream(file);serializer.setOutput(os, "utf-8"); // 3.写xml文件. serializer.startDocument("utf-8", true);//写开头serializer.startTag(null, "student");//开始标签 serializer.startTag(null,"name"); serializer.text(name);//文本标签 serializer.endTag(null,"name");//结束标签 serializer.startTag(null,"number"); serializer.text(number); serializer.endTag(null,"number"); serializer.startTag(null,"sex"); serializer.text(sex); serializer.endTag(null,"sex"); serializer.endTag(null,"student"); serializer.endDocument();//写结尾 os.close(); Toast.makeText(this,"保存数据成功", 0).show(); } catch (Exception e) {e.printStackTrace(); Toast.makeText(this,"保存数据失败", 0).show(); }
XML的解析
1. DOM解析
是一种基于对象的API,它会将XML文件的所有内容以文档树方式存放在内存中,然后允许使用DOMAPI遍历XML树、检索所需的数据,这样便能根据树的结构以节点形式来对文件进行操作。由于DOM需要将整个XML文件以文档树的形式存放在内存中,消耗内存比较大,在Android下不介意使用该种方式进行解析。
2. SAX解析
会逐行扫描XML文档,当遇到标签时触发解析处理器,采用事件处理的方式解析XML。它在读取文档的同时即可对XML进行处理,不必等到文档加载结束,相对快捷,而且也不需要将整个文档加载进内存,因此不存在占用内存的问题,可以解析超大XML。但是,SAX解析只能用来读取XML的数据,无法进行增删改。
3. PULL解析跟SAX解析类似,也是基于事件处理的方式。PULL解析器是一个开源的Java项目,既可以用于Android应用,也可以用与JavaEE程序。Android已经集成了PULL解析器,因此,在android中最常用的解析方式就是PULL解析。
SAX和PULL解析对比:Pull 解析器的运行方式与SAX
解析器相似,都属于事件驱动模式。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch
对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text
类型元素的值。
SAX 解析器的工作方式是自动将事件推入事件处理器进行处理,因此你不能控制事件的处理主动结束;而Pull
解析器的工作方式为允许你的应用程序代码主动从解析器中获取事件,正因为是主动获取事件,因此可以在满足了需要的条件后不再获取事件,结束解析。
Android下使用PULL方式解析XML文件的代码如下:
try {//学生信息的xml文件存在 //1.获取到一个xml解析器 XmlPullParser parser = Xml.newPullParser(); //2.设置解析器的初始化参数 FileInputStream inputStream = new FileInputStream(file);parser.setInput(inputStream, "utf-8"); //3.解析xml文件 int type = parser.getEventType();//得到第一个事件的类型. System.out.println("type:"+type); StringBuilder sb = new StringBuilder();//当事件类型不是文档的结尾则一直遍历每一个节点 while(type!=XmlPullParser.END_DOCUMENT){if(type==XmlPullParser.START_TAG){ //开始节点 //判断节点的名称 if("name".equals(parser.getName())){String nameStr = parser.nextText(); System.out.println("姓名:"+nameStr); sb.append("姓名:"+nameStr+"\n"); }else if("number".equals(parser.getName())){String numberStr = parser.nextText(); System.out.println("学号:"+numberStr); sb.append("学号:"+numberStr+"\n"); }else if("sex".equals(parser.getName())){String sexStr = parser.nextText(); System.out.println("性别:"+sexStr); sb.append("性别:"+sexStr+"\n"); } } type = parser.next();//获取下一个事件类型 System.out.println("type:"+type); } inputStream.close();//浪费资源 造成内存泄漏! tv_result.setText(sb.toString()); } catch (Exception e) {e.printStackTrace(); Toast.makeText(this,"解析学生信息失败", 0).show(); }
以上是Xml格式数据的生成和解析的代码详情的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

XML文件可以用PPT打开吗?XML,即可扩展标记语言(ExtensibleMarkupLanguage),是一种被广泛应用于数据交换和数据存储的通用标记语言。与HTML相比,XML更加灵活,能够定义自己的标签和数据结构,使得数据的存储和交换更加方便和统一。而PPT,即PowerPoint,是微软公司开发的一种用于创建演示文稿的软件。它提供了图文并茂的方

使用Python实现XML数据的合并和去重XML(eXtensibleMarkupLanguage)是一种用于存储和传输数据的标记语言。在处理XML数据时,有时候我们需要将多个XML文件合并成一个,或者去除重复的数据。本文将介绍如何使用Python实现XML数据的合并和去重的方法,并给出相应的代码示例。一、XML数据合并当我们有多个XML文件,需要将其合

Python中的XML数据转换为CSV格式XML(ExtensibleMarkupLanguage)是一种可扩展标记语言,常用于数据的存储和传输。而CSV(CommaSeparatedValues)则是一种以逗号分隔的文本文件格式,常用于数据的导入和导出。在处理数据时,有时需要将XML数据转换为CSV格式以便于分析和处理。Python作为一种功能强大

使用Python实现XML数据的筛选和排序引言:XML是一种常用的数据交换格式,它以标签和属性的形式存储数据。在处理XML数据时,我们经常需要对数据进行筛选和排序。Python提供了许多有用的工具和库来处理XML数据,本文将介绍如何使用Python实现XML数据的筛选和排序。读取XML文件在开始之前,我们需要先读取XML文件。Python有许多XML处理库,

使用PHP将XML数据导入数据库引言:在开发中,我们经常需要将外部数据导入到数据库中进行进一步的处理和分析。而XML作为一种常用的数据交换格式,也经常被用来存储和传输结构化数据。本文将介绍如何使用PHP将XML数据导入数据库。步骤一:解析XML文件首先,我们需要解析XML文件,提取出需要的数据。PHP提供了几种解析XML的方式,其中最常用的是使用Simple

Python实现XML和JSON之间的转换导语:在日常的开发过程中,我们常常需要将数据在不同的格式之间进行转换。XML和JSON是常见的数据交换格式,在Python中,我们可以使用各种库来实现XML和JSON之间的相互转换。本文将介绍几种常用的方法,并附带代码示例。一、XML转JSON在Python中,我们可以使用xml.etree.ElementTree模

使用Python处理XML中的错误和异常XML是一种常用的数据格式,用于存储和表示结构化的数据。当我们使用Python处理XML时,有时可能会遇到一些错误和异常。在本篇文章中,我将介绍如何使用Python来处理XML中的错误和异常,并提供一些示例代码供参考。使用try-except语句捕获XML解析错误当我们使用Python解析XML时,有时候可能会遇到一些

Python解析XML中的特殊字符和转义序列XML(eXtensibleMarkupLanguage)是一种常用的数据交换格式,用于在不同系统之间传输和存储数据。在处理XML文件时,经常会遇到包含特殊字符和转义序列的情况,这可能会导致解析错误或者误解数据。因此,在使用Python解析XML文件时,我们需要了解如何处理这些特殊字符和转义序列。一、特殊字符和
