热门标签 | 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卡写权限

 

完毕,全部代码如上.

 



推荐阅读
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • OBS Studio自动化实践:利用脚本批量生成录制场景
    本文探讨了如何利用OBS Studio进行高效录屏,并通过脚本实现场景的自动生成。适合对自动化办公感兴趣的读者。 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • VC++ 文件操作实践案例
    本文介绍如何在Visual C++ 6.0环境下,通过下载的VC源代码实现文件的基本读写操作,并解决常见的运行错误。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 如何处理PHP缺少扩展的问题
    本文将详细介绍如何解决PHP环境中缺少扩展的问题,包括检查当前环境、修改配置文件以及验证修改是否生效的具体步骤,帮助开发者更好地管理和使用PHP扩展。 ... [详细]
  • 本文详细探讨了在Java中如何将图像对象转换为文件和字节数组(Byte[])的技术。虽然网络上存在大量相关资料,但实际操作时仍需注意细节。本文通过使用JMSL 4.0库中的图表对象作为示例,提供了一种实用的方法。 ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • 本文详细介绍了JQuery Mobile框架中特有的事件和方法,帮助开发者更好地理解和应用这些特性,提升移动Web开发的效率。 ... [详细]
  • Requests库的基本使用方法
    本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ... [详细]
  • spring boot使用jetty无法启动 ... [详细]
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社区 版权所有