热门标签 | 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 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 在 Android 开发中,通过 Intent 启动 Activity 或 Service 时,可以使用 putExtra 方法传递数据。接收方可以通过 getIntent().getExtras() 获取这些数据。本文将介绍如何使用 RoboGuice 框架简化这一过程,特别是 @InjectExtra 注解的使用。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • Struts与Spring框架的集成指南
    本文详细介绍了如何将Struts和Spring两个流行的Java Web开发框架进行整合,涵盖从环境配置到代码实现的具体步骤。 ... [详细]
  • 在Oracle数据库中,使用Dbms_Output.Put_Line进行输出调试时,若单行字符超过255个,则会遇到ORA-20000错误。本文介绍了一种有效的方法来处理这种情况,通过创建自定义包和视图,实现对长字符串的分割和正确输出。 ... [详细]
  • 在本教程中,我们将深入探讨如何使用 Python 构建游戏的主程序模块。通过逐步实现各个关键组件,最终完成一个功能完善的游戏界面。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 深入理解Vue.js:从入门到精通
    本文详细介绍了Vue.js的基础知识、安装方法、核心概念及实战案例,帮助开发者全面掌握这一流行的前端框架。 ... [详细]
  • Redux入门指南
    本文介绍Redux的基本概念和工作原理,帮助初学者理解如何使用Redux管理应用程序的状态。Redux是一个用于JavaScript应用的状态管理库,特别适用于React项目。 ... [详细]
  • 黑马头条项目:Vue 文章详情模块与交互功能实现
    本文详细介绍了如何在黑马头条项目中配置文章详情模块的路由、获取和展示文章详情数据,以及实现关注、点赞、不喜欢和评论功能。通过这些步骤,您可以全面了解如何开发一个完整的前端文章详情页面。 ... [详细]
  • This pull request introduces the ability to provide comprehensive paragraph configurations directly within the Create Note and Create Paragraph REST endpoints, reducing the need for additional configuration calls. ... [详细]
  • 本文探讨了使用C#在SQL Server和Access数据库中批量插入多条数据的性能差异。通过具体代码示例,详细分析了两种数据库的执行效率,并提供了优化建议。 ... [详细]
  • 本文详细探讨了JavaScript中的作用域链和闭包机制,解释了它们的工作原理及其在实际编程中的应用。通过具体的代码示例,帮助读者更好地理解和掌握这些概念。 ... [详细]
  • 本文介绍 SQL Server 的基本概念和操作,涵盖系统数据库、常用数据类型、表的创建及增删改查等基础操作。通过实例帮助读者快速上手 SQL Server 数据库管理。 ... [详细]
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社区 版权所有