xml 和android脚本之家,Android编程创建与解析xml的常用方法详解

本文实例讲述了Android编程创建与解析xml的常用方法。分享给大家供大家参考,具体如下:

今天我今天给大家讲解一下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布局文件,代码如下:

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:id="@+id/btn1"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="创建XML文件"

/>

android:id="@+id/btn2"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="DOM解析XML"

/>

android:id="@+id/btn3"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="XmlPullParse解析XML"

/>

android:id="@+id/result"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

第三步:修改主核心程序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 extendsActivity implementsOnClickListener {

privatestatic final String BOOKS_PATH = "/sdcard/books.xml";

privateButton mButton1, mButton2, mButton3;

privateTextView mTextView;

@Override

publicvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

setupViews();

}

// 初始化工作

privatevoid 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文件

privatevoid 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文件

privatevoid 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文件

privatevoid xmlPullParseXML() {

String res ="本结果是通过XmlPullParse解析:" + "/n";

try{

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

XmlPullParser xmlPullParser = factory.newPullParser();

xmlPullParser.setInput(Thread.currentThread()

.getContextClassLoader().getResourceAsStream(BOOKS_PATH),

"UTF-8");

inteventType = xmlPullParser.getEventType();

try{

while(eventType != XmlPullParser.END_DOCUMENT) {

String nodeName = xmlPullParser.getName();

switch(eventType) {

caseXmlPullParser.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);

}

// 按钮事件响应

publicvoid onClick(View v) {

if(v == mButton1) {

createXmlFile();

}else if(v == mButton2) {

domParseXML();

}else if(v == mButton3) {

xmlPullParseXML();

}

}

}

第四步:由于我们在Sd卡上新建了文件,需要增加权限,如下代码(第13行):

package="com.tutor.xml"android:versionCode="1"android:versionName="1.0">

第五步:运行上述工程,查看效果:

启动首界面:

d90d30496f88d00c2873e23f792935a2.png

点击创建XML文件按钮,生成books.xml文件

5b314ee4658391bdff1523d5618a4e28.png

books.xml内容如下:

Android教程0

Frankie0

Android教程1

Frankie1

Android教程2

Frankie2

点击DOM解析XML按钮:

71f49afe7b372a7fe62616ce43c5ca76.png

点击XmlPullParse解析XML按钮:

71f49afe7b372a7fe62616ce43c5ca76.png

Ok~今天就先讲到这里。

PS:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:

希望本文所述对大家Android程序设计有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值