Android创建xml以及一些解析xml的常用方法。
首先是创建,我们用XmlSerializer这个类来创建一个xml文件,其次是解析xml文件,常用的有dom,sax,XmlPullParser等方法,由于sax代码有点复杂,本节只讲解一下dom与XmlPullParser解析,sax我将会在下一节单独讲解,至于几种解析xml的优缺点我就不再讲述了。
为了方便理解,我做了一个简单的Demo。首先首界面有三个按钮,点击第一个按钮会在sdcard目录下创建一个books.xml文件。另外两个按钮分别是调用dom与XmlPullParser方法解析xml文件,并将结果显示在一个TextView里。大家可以按照我的步骤一步步来:
第一步:新建一个Android工程,命名为XmlDemo
第二步:修改main.xml布局文件,代码如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/btn1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="创建XML文件" /> <Button android:id="@+id/btn2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="DOM解析XML" /> <Button android:id="@+id/btn3" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="XmlPullParse解析XML" /> <TextView android:id="@+id/result" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
第三步:修改主核心程序XmlDemo.java,代码如下:
package com.tutor.xml; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory; import org.xmlpull.v1.XmlSerializer; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.util.Xml; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class XmlDemo extends Activity implements OnClickListener { private static final String BOOKS_PATH = "/sdcard/books.xml"; private Button mButton1, mButton2, mButton3; private TextView mTextView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setupViews(); } // 初始化工作 private void setupViews() { mTextView = (TextView) findViewById(R.id.result); mButton1 = (Button) findViewById(R.id.btn1); mButton2 = (Button) findViewById(R.id.btn2); mButton3 = (Button) findViewById(R.id.btn3); mButton1.setOnClickListener(this); mButton2.setOnClickListener(this); mButton3.setOnClickListener(this); } // 创建xml文件 private void createXmlFile() { File linceseFile = new File(BOOKS_PATH); try { linceseFile.createNewFile(); } catch (IOException e) { Log.e("IOException", "exception in createNewFile() method"); } FileOutputStream fileos = null; try { fileos = new FileOutputStream(linceseFile); } catch (FileNotFoundException e) { Log.e("FileNotFoundException", "can't create FileOutputStream"); } XmlSerializer serializer = Xml.newSerializer(); try { serializer.setOutput(fileos, "UTF-8"); serializer.startDocument(null, true); serializer.startTag(null, "books"); for (int i = 0; i < 3; i++) { serializer.startTag(null, "book"); serializer.startTag(null, "bookname"); serializer.text("Android教程" + i); serializer.endTag(null, "bookname"); serializer.startTag(null, "bookauthor"); serializer.text("Frankie" + i); serializer.endTag(null, "bookauthor"); serializer.endTag(null, "book"); } serializer.endTag(null, "books"); serializer.endDocument(); serializer.flush(); fileos.close(); } catch (Exception e) { Log.e("Exception", "error occurred while creating xml file"); } Toast.makeText(getApplicationContext(), "创建xml文件成功!", Toast.LENGTH_SHORT).show(); } // dom解析xml文件 private void domParseXML() { File file = new File(BOOKS_PATH); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = null; try { db = dbf.newDocumentBuilder(); } catch (ParserConfigurationException e) { e.printStackTrace(); } Document doc = null; try { doc = db.parse(file); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Element root = doc.getDocumentElement(); NodeList books = root.getElementsByTagName("book"); String res = "本结果是通过dom解析:" + "/n"; for (int i = 0; i < books.getLength(); i++) { Element book = (Element) books.item(i); Element bookname = (Element) book.getElementsByTagName("bookname") .item(0); Element bookauthor = (Element) book.getElementsByTagName( "bookauthor").item(0); res += "书名: " + bookname.getFirstChild().getNodeValue() + " " + "作者: " + bookauthor.getFirstChild().getNodeValue() + "/n"; } mTextView.setText(res); } // xmlPullParser解析xml文件 private void xmlPullParseXML() { String res = "本结果是通过XmlPullParse解析:" + "/n"; try { XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser xmlPullParser = factory.newPullParser(); xmlPullParser.setInput(Thread.currentThread() .getContextClassLoader().getResourceAsStream(BOOKS_PATH), "UTF-8"); int eventType = xmlPullParser.getEventType(); try { while (eventType != XmlPullParser.END_DOCUMENT) { String nodeName = xmlPullParser.getName(); switch (eventType) { case XmlPullParser.START_TAG: if ("bookname".equals(nodeName)) { res += "书名: " + xmlPullParser.nextText() + " "; } else if ("bookauthor".equals(nodeName)) { res += "作者: " + xmlPullParser.nextText() + "/n"; } break; default: break; } eventType = xmlPullParser.next(); } } catch (IOException e) { e.printStackTrace(); } } catch (XmlPullParserException e) { e.printStackTrace(); } mTextView.setText(res); } // 按钮事件响应 public void onClick(View v) { if (v == mButton1) { createXmlFile(); } else if (v == mButton2) { domParseXML(); } else if (v == mButton3) { xmlPullParseXML(); } } }
第四步:由于我们在Sd卡上新建了文件,需要增加权限,如下代码(第13行):
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.tutor.xml" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".XmlDemo" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="7" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> </manifest>
第五步:运行上述工程,查看效果:
启动首界面:
点击创建XML文件按钮,生成books.xml文件
books.xml内容如下:
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?> <books> <book> <bookname>Android教程0</bookname> <bookauthor>Frankie0</bookauthor> </book> <book> <bookname>Android教程1</bookname> <bookauthor>Frankie1</bookauthor> </book> <book> <bookname>Android教程2</bookname> <bookauthor>Frankie2</bookauthor> </book> </books>
点击DOM解析XML按钮:
点击XmlPullParse解析XML按钮:
相关推荐
本文将深入探讨如何在Android中使用PULL解析器(Pull Parser)来解析XML文档,这是一种轻量级且高效的解析方式。 **PULL解析器概述** PULL解析器(Pull Parsing)是一种事件驱动的解析模型,它不需要完整的XML文档...
Android提供了多种解析XML的方式,主要包括以下几种: 1. **DOM解析器**:Document Object Model(DOM)解析器将整个XML文件加载到内存中,形成一个树形结构,便于对整个文档进行遍历。但是,对于大型XML文件,DOM...
本篇文章将深入探讨三种在Android中解析XML的方法:DOM(文档对象模型)、Pull(拉取解析器)和SAX(简单API for XML),并且会特别强调如何识别文件编码。 首先,DOM解析是将整个XML文件加载到内存中形成一个树形...
这篇博文将深入探讨Android中的XML解析机制,包括DOM、SAX和Pull解析器三种主要方法。 首先,我们来看DOM解析。DOM(Document Object Model)是一种将XML文档加载到内存中并创建一个树形结构的方法。通过DOM解析,...
### Android中XML属性与解析深度解析 #### 一、引言 在Android开发中,XML文件扮演着至关重要的角色,特别是在界面布局设计方面。通过理解并掌握XML的基本属性及其解析方法,开发者能够更加高效地创建出美观且功能...
总的来说,理解如何从assets文件夹读取和解析XML是Android开发中的一个重要技能。它能帮助开发者灵活地处理非标准资源,提高应用的可扩展性和灵活性。通过实践这个示例,开发者可以学习到如何在实际项目中应用Pull...
"Android pull解析xml源码"这个主题聚焦于使用Android的XML Pull解析器来理解和操作XML文档。Pull解析器是一种事件驱动的解析方法,与DOM(Document Object Model)和SAX(Simple API for XML)不同,它不需要将整个...
在SAX接口中,事件源是org.xml.sax包中的XMLReader,它通过parser()方法来解析XML文档,并产生事件。事件处理器是org.xml.sax包中ContentHander、DTDHander、ErrorHandler,以及EntityResolver这4个接口....
以下是对XML解析在Android中的应用及几种常见方法的详细说明: 1. DOM解析器(Document Object Model): DOM解析器将整个XML文档加载到内存中,形成一个树形结构,允许开发者通过节点遍历访问XML内容。虽然DOM解析...
在Android中,使用SAX解析XML文件通常涉及以下几个步骤: 1. 创建SAX解析器工厂:首先,需要创建一个`SAXParserFactory`实例,这是通过调用`SAXParserFactory.newInstance()`方法实现的。这个工厂类用于生成`...
下面将详细介绍Android中XML解析的几种主要方法及其应用。 1. DOM解析器(Document Object Model) DOM解析器一次性加载整个XML文档到内存中,形成一个树形结构,可以方便地遍历和访问每个节点。这种方式适合小规模...
JSON解析在Android中通常有以下几种方式: 1. **Gson库**:Google提供的Gson库能将Java对象直接转换为JSON字符串,反之亦然。使用Gson非常方便,例如: ```java Gson gson = new Gson(); MyObject obj = new My...
总结,SAX解析XML在Android中主要涉及以下几个步骤:创建`ContentHandler`子类,实现事件处理方法,创建`SAXParserFactory`和`SAXParser`,并调用`parse`方法解析XML文件。这种解析方式适用于处理大体积的XML文件,...
本资料“比较通用的xml解析方法”探讨了在Android中解析XML的几种常见方法。 1. DOM解析器: DOM(Document Object Model)是XML文档的树形结构表示。它一次性加载整个XML文档到内存中,形成一个完整的树形结构,...
在Android中,有两种主要的XML解析方法:DOM(Document Object Model)解析和SAX(Simple API for XML)解析。 - DOM解析:DOM解析器将整个XML文档加载到内存中,创建一个树形结构,允许开发者通过节点遍历来访问...
本文详细探讨了在Android平台上解析XML文件的几种主流技术:DOM(Document Object Model)、SAX(Simple API for XML)及XMLPull。通过对这些技术的具体实现过程进行阐述,并结合实际案例,对比分析了它们在处理不同...
在Android中,XML文件主要有以下几种类型: 1. **布局文件**:XML文件用于定义用户界面的布局,如`activity_main.xml`。它包含了各种视图组件(如TextView、ImageView、Button等)及其布局属性,如宽度、高度、对齐...
在Android中,`org.w3c.dom`包提供了DOM解析的相关类,如`DocumentBuilderFactory`用于创建`DocumentBuilder`,进而解析XML文件。 2. SAX(Simple API for XML)解析: SAX是一种事件驱动的解析方法,不将整个XML...
本文将深入探讨Android中解析XML的三种主要方法:DOM、SAX和PULL解析器。 1. DOM(Document Object Model)解析: DOM解析器将整个XML文档加载到内存中,创建一个树形结构,称为DOM树。每个XML元素、属性、文本等都...