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花样数据的生成和剖析的代码概况的细致内容,更多请关注ki4网别的相干文章!