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布局文件,代码如下:
<?xmlversion="1.0"encoding="utf-8"?> <linearlayoutxmlns: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 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行):
<?xmlversion="1.0"encoding="utf-8"?> <manifestxmlns:android="http://schemas.android.com/apk/res/android" package="com.tutor.xml"android:versioncode="1"android:versionname="1.0"> <applicationandroid:icon="@drawable/icon"android:label="@string/app_name"> <activityandroid:name=".xmldemo"android:label="@string/app_name"> <intent-filter> <actionandroid:name="android.intent.action.main"/> <categoryandroid:name="android.intent.category.launcher"/> </intent-filter> </activity> </application> <uses-sdkandroid:minsdkversion="7"/> <uses-permissionandroid:name="android.permission.write_external_storage"/> </manifest>
第五步:运行上述工程,查看效果:
启动首界面:
点击创建xml文件按钮,生成books.xml文件
books.xml内容如下:
<?xmlversion='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按钮:
ok~今天就先讲到这里。
ps:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:
在线xml/json互相转换工具:
在线格式化xml/在线压缩xml:
xml在线压缩/格式化工具:
xml代码在线格式化美化工具:
更多关于android相关内容感兴趣的读者可查看本站专题:《android操作xml数据技巧总结》、《android编程之activity操作技巧总结》、《android资源操作技巧汇总》、《android文件操作技巧汇总》、《android开发入门与进阶教程》、《android视图view技巧总结》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。