欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android编程创建与解析xml的常用方法详解

程序员文章站 2023-12-01 08:08:46
本文实例讲述了android编程创建与解析xml的常用方法。分享给大家供大家参考,具体如下: 今天我今天给大家讲解一下android创建xml以及一些解析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>

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

启动首界面:

Android编程创建与解析xml的常用方法详解

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

Android编程创建与解析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按钮:

Android编程创建与解析xml的常用方法详解

点击xmlpullparse解析xml按钮:

Android编程创建与解析xml的常用方法详解

ok~今天就先讲到这里。

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

在线xml/json互相转换工具:

在线格式化xml/在线压缩xml

xml在线压缩/格式化工具:

xml代码在线格式化美化工具:

更多关于android相关内容感兴趣的读者可查看本站专题:《android操作xml数据技巧总结》、《android编程之activity操作技巧总结》、《android资源操作技巧汇总》、《android文件操作技巧汇总》、《android开发入门与进阶教程》、《android视图view技巧总结》及《android控件用法总结

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