Android从资源文件中最简单解析XML文件

qianyu 12年前

在我第一篇的经验中,说到了解析SD卡里面的XML文件,那么如何解析资源文件本身中的XML文件呢,经过研究我发现一个极其简单的做法,下面开始正题。
第一:创建XML文件,XML文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<books>
    <book>
        <bookname>Android疯狂讲义</bookname>
        <bookauthor>小书</bookauthor>
        <bookprice>89.0</bookprice>
        <bookpublish>2008年</bookpublish>
    </book>
    <book>
        <bookname>XML疯狂讲义</bookname>
        <bookauthor>小书</bookauthor>
        <bookprice>100.0</bookprice>
        <bookpublish>2009年</bookpublish>
    </book>
    <book>
        <bookname>Java疯狂讲义</bookname>
        <bookauthor>小书</bookauthor>
        <bookprice>70.0</bookprice>
        <bookpublish>2012年</bookpublish>
    </book>
</books>
我把这个XML文件放在xml目录下,这个目录需要自己建立

第二:主界面非常简洁,只有一个按钮和一个文本框用来显示解析的结果,如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent" >
   
    <Button
        android:id="@+id/bn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="XmlPullParse解析xml文件"
        />
    <TextView
        android:id="@+id/textview"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />

</LinearLayout>


第三:主文件的代码,如下:
package com.example.xml1;

import java.io.IOException;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import android.os.Bundle;
import android.app.Activity;
import android.content.res.XmlResourceParser;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
    private Button bn;
    private TextView textview;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setupview();
        this.setTitle("资源文件中解析xml文件");
        bn.setOnClickListener(new OnClickListener()
        {
   public void onClick(View v) {
    // TODO Auto-generated method stub
    String res="本结果通过XmlPullParse解析:"+"\n"+"\n";
    try
    {
     //创建一个资源ID
     XmlPullParser file=getResources().getXml(R.xml.books);
     int eventType=file.getEventType();
     try
     {
      while(eventType!=file.END_DOCUMENT)
      {
       String nodename=file.getName();
       switch(eventType)
       {
         case XmlPullParser.START_TAG:
         if("bookname".equals(nodename))
         {
          res+="书名:"+file.nextText()+"\n";
         }
         else if("bookauthor".equals(nodename))
         {
          res+="作者:"+file.nextText()+"\n";
         }
         else if("bookprice".equals(nodename))
         {
          res+="价格:"+file.nextText()+"\n";
         }
         else if("bookpublish".equals(nodename))
         {
          res+="出版日期:"+file.nextText()+"\n"+"\n";
         }
        break;
        default:
        break;
       }
       eventType=file.next();
      }
     }
     catch(IOException e)
     {
      e.printStackTrace();
     }
    }
    
    catch(XmlPullParserException e)
    {
     e.printStackTrace();
    }
    textview.setText(res);
    Toast.makeText(MainActivity.this, "解析成功", Toast.LENGTH_SHORT).show();
   }
        });
    }

    private void setupview()
    {
     bn=(Button)findViewById(R.id.bn);
     textview=(TextView)findViewById(R.id.textview);
    }
   
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}
可以看到,不用创建XmlPullParseFactory工厂,直接找到资源ID

第四:运行结果如下:
未命名.jpg
可以看到,解析的正是XMl中的内容,可见在资源文件中解析XML文件是多么的简单啊,我用的是Android 4.1SDK的