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

 

完毕,全部代码如上.

 



推荐阅读
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • Jquery 跨域问题
    为什么80%的码农都做不了架构师?JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
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社区 版权所有