热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:AndroidDom和XmlPullParse解析XML文件

篇首语:本文由编程笔记#小编为大家整理,主要介绍了AndroidDom和XmlPullParse解析XML文件相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Android Dom和XmlPullParse解析XML文件相关的知识,希望对你有一定的参考价值。




Android Dom和XmlPullParse解析XML文件

最近在在XML解析,测试了DOM和XmlPullParse两种模式解析XML,记录下来!

首先,创建在Sdcard里创建Xml文件,然后,建立两个按钮分别使用DOM、XmlPullParse来解析Xml文件,并且分别显示在TextView中.

废话少说,先上效果图:

 

 


1,XmlPullParse使用基础:


1.1获取XmlPullParse


1 XmlPullParserFactory factory =XmlPullParserFactory.newInstance();
2 XmlPullParser xmlPullParser =factory.newPullParser();

 


1.2 设置XmlPullParse解析器的输入


1 this.getClass().getClassLoader();
2 xmlPullParser.setInput(ClassLoader.getSystemResourceAsStream(BOOKS_PATH),"UTF-8");


1.3 解析XML文档数据.其主要工作就是调用XmlPullParser.next()获取数据,然后再调用XmlPullParser.getEventType()得到当前解析状态再做相应的处理


1 int eventType = parser.getEventType(); //返回的状态类型
2 if (eventType == XmlPullParser.START_DOCUMENT) //XML文档开始
3 if (eventType == XmlPullParser.START_TAG) //开始读取某个标签
4 if (eventType == XmlPullParser.END_TAG) //结束读取某个标签
5 //TEXT:Text内容
6 if (eventType == XmlPullParser.END_DOCUMENT) //XML文档结束


 


2.布局文件,三个Button,两个TextView,代码如下:


1 xml version="1.0" encoding="utf-8"?>
2 <LinearLayout
3 xmlns:android="http://schemas.android.com/apk/res/android"
4 android:layout_width="match_parent"
5 android:layout_height="match_parent"
6 android:orientation="vertical">
7
8 <Button
9 android:id="@+id/create_xml"
10 android:layout_width="match_parent"
11 android:layout_height="40dp"
12 android:text="创建XML文件"/>
13
14 <Button
15 android:id="@+id/dom_xml"
16 android:layout_width="match_parent"
17 android:layout_height="40dp"
18 android:text="DOM解析XML"/>
19
20 <Button
21 android:id="@+id/pull_xml"
22 android:layout_width="match_parent"
23 android:layout_height="40dp"
24 android:text="XmlPullParse解析XML"/>
25
26 <TextView
27 android:id="@+id/dom_text"
28 android:layout_width="match_parent"
29 android:layout_height="wrap_content"
30 android:textColor="@color/colorAccent"
31 android:textSize="18dip"/>
32
33 <TextView
34 android:id="@+id/pull_text"
35 android:layout_width="match_parent"
36 android:layout_height="wrap_content"
37 android:textColor="@color/colorPrimary"
38 android:textSize="18dip"/>
39
40 LinearLayout>

 


3.主Activity:创建Xml文件,和Dom和XmlPullParse解析XMlL,代码如下:


1 package com.zwl.xmlparseproject;
2
3 import android.app.Activity;
4 import android.support.v7.app.AppCompatActivity;
5 import android.os.Bundle;
6 import android.util.Log;
7 import android.util.Xml;
8 import android.view.View;
9 import android.widget.Button;
10 import android.widget.TextView;
11 import android.widget.Toast;
12
13 import org.w3c.dom.Document;
14 import org.w3c.dom.Element;
15 import org.w3c.dom.Node;
16 import org.w3c.dom.NodeList;
17 import org.xml.sax.SAXException;
18 import org.xmlpull.v1.XmlPullParser;
19 import org.xmlpull.v1.XmlPullParserException;
20 import org.xmlpull.v1.XmlPullParserFactory;
21 import org.xmlpull.v1.XmlSerializer;
22
23 import java.io.File;
24 import java.io.FileNotFoundException;
25 import java.io.FileOutputStream;
26 import java.io.IOException;
27
28 import javax.xml.parsers.DocumentBuilder;
29 import javax.xml.parsers.DocumentBuilderFactory;
30 import javax.xml.parsers.ParserConfigurationException;
31
32 public class MainActivity extends Activity implements View.OnClickListener {
33
34 private static final String TAG = MainActivity.class.getSimpleName();
35 private static final String BOOKS_PATH ="/sdcard/books.xml"; //创建books.xml文件路径
36 private Button mCreateXml,mDomXml,mPullXml;
37 private TextView mDemoText,mPullText;
38
39 @Override
40 protected void onCreate(Bundle savedInstanceState) {
41 super.onCreate(savedInstanceState);
42 setContentView(R.layout.activity_main);
43 setupViews();
44 }
45
46 private void setupViews() {
47 mCreateXml =findViewById(R.id.create_xml);
48 mDomXml =findViewById(R.id.dom_xml);
49 mPullXml =findViewById(R.id.pull_xml);
50 mDemoText =findViewById(R.id.dom_text);
51 mPullText =findViewById(R.id.pull_text);
52 mCreateXml.setOnClickListener(this);
53 mDomXml.setOnClickListener(this);
54 mPullXml.setOnClickListener(this);
55 }
56
57 @Override
58 public void onClick(View v) {
59 switch (v.getId()){
60 case R.id.create_xml:
61 Log.d(TAG,"create_xml");
62 createXml();
63 break;
64 case R.id.dom_xml:
65 Log.d(TAG,"dom_xml");
66 domParseXML();
67 break;
68 case R.id.pull_xml:
69 Log.d(TAG,"pull_xml");
70 xmlPullParseXML();
71 break;
72 default:
73 break;
74 }
75 }
76
77 //xmlPullParse解析Xml
78 private void xmlPullParseXML() {
79 String res="本结果通过XmlPullParse解析:"+"\\n";
80 try{
81 XmlPullParserFactory factory =XmlPullParserFactory.newInstance();
82 XmlPullParser xmlPullParser =factory.newPullParser();
83 this.getClass().getClassLoader();
84 xmlPullParser.setInput(ClassLoader.getSystemResourceAsStream(BOOKS_PATH),"UTF-8");
85 int eventType =xmlPullParser.getEventType();
86 try {
87 while (eventType!=XmlPullParser.END_DOCUMENT){
88 String nodename =xmlPullParser.getName();
89 switch (eventType){
90 case XmlPullParser.START_TAG:
91 if ("bookname".equals(nodename)){
92 res += "书名:"+xmlPullParser.nextText()+"";
93 }else if ("bookauthor".equals(nodename)){
94 res +="作者:"+xmlPullParser.nextText()+"\\n";
95 }
96 break;
97 default:
98 break;
99 }
100 eventType =xmlPullParser.next();
101 }
102 } catch (IOException e) {
103 e.printStackTrace();
104 }
105 } catch (XmlPullParserException e) {
106 e.printStackTrace();
107 }
108 mPullText.setText(res);
109 Toast.makeText(MainActivity.this, "XmlPullParser解析成功", Toast.LENGTH_SHORT).show();
110 }
111
112 //dom解析XML文件
113 private void domParseXML() {
114 File file=new File(BOOKS_PATH);
115 DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
116 DocumentBuilder db =null;
117 try{
118 db =dbf.newDocumentBuilder();
119 } catch (ParserConfigurationException e) {
120 e.printStackTrace();
121 }
122 Document document =null;
123 try{
124 document =db.parse(file);
125 } catch (SAXException e) {
126 e.printStackTrace();
127 } catch (IOException e) {
128 e.printStackTrace();
129 }
130 Element root =document.getDocumentElement();
131 NodeList books =root.getElementsByTagName("book");
132 String res ="本结果是通过dom解析的:"+"\\n";
133 for (int i=0 ; i){
134 Node book = books.item(i);
135 Node bookname=((org.w3c.dom.Element) book).getElementsByTagName("bookname").item(0);
136 Node bookauthor=((org.w3c.dom.Element) book).getElementsByTagName("bookauthor").item(0);
137 res += "书名:"+bookname.getFirstChild().getNodeValue()+""+
138 "作者:"+bookauthor.getFirstChild().getNodeValue()+"\\n";
139 }
140 mDemoText.setText(res);
141 Toast.makeText(MainActivity.this, "解析成功", Toast.LENGTH_SHORT).show();
142 }
143
144 //创建XML文件
145 private void createXml() {
146 File file =new File(BOOKS_PATH);
147 try{
148 file.createNewFile();
149 } catch (IOException e) {
150 e.printStackTrace();
151 Toast.makeText(MainActivity.this, "exception in createnewfile() method", Toast.LENGTH_SHORT).show();
152 }
153 FileOutputStream fileOutputStream = null;
154 try {
155 fileOutputStream =new FileOutputStream(file);
156 } catch (FileNotFoundException e) {
157 e.printStackTrace();
158 Toast.makeText(MainActivity.this, "can\'t create file fileoutputStream", Toast.LENGTH_SHORT).show();
159 }
160 XmlSerializer serializer = Xml.newSerializer();
161 try {
162 serializer.setOutput(fileOutputStream,"UTF-8");
163 serializer.startDocument(null,true);
164 serializer.startTag(null,"books");
165 for (int i=0 ;i<3;i++){
166 serializer.startTag(null,"book");
167 serializer.startTag(null,"bookname");
168 serializer.text("Android测试"+i);
169 serializer.endTag(null,"bookname");
170 serializer.startTag(null,"bookauthor");
171 serializer.text("xiaoshu"+i);
172 serializer.endTag(null,"bookauthor");
173 serializer.endTag(null,"book");
174 }
175 serializer.endTag(null,"books");
176 serializer.endDocument();
177 serializer.flush();
178 fileOutputStream.close();
179 } catch (IOException e) {
180 e.printStackTrace();
181 }
182 Toast.makeText(MainActivity.this, "创建xml文件成功", Toast.LENGTH_SHORT).show();
183 }
184 }

 


4. 由于我们在Sd卡上新建了文件,需要在AndroidManifest.xml里增加权限


1 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> //内外置SD卡写权限

 

完毕,全部代码如上.

 



推荐阅读
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
author-avatar
手机用户2502882045
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有