首先是创建,我们用XmlSerializer这个类来创建一个xml文件,其次是解析xml文件,常用的有dom,sax,XmlPullParser等方法,由于sax代码有点复杂,本节只讲解一下dom与XmlPullParser解析,至于几种解析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卡上新建了文件,需要增加权限,如下代码(第16行):
 
 
<?
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内容如下:
[java]
  1. <?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
  2. <books>
  3. <book>
  4. <bookname>Android教程0</bookname>
  5. <bookauthor>Frankie0</bookauthor>
  6. </book>
  7. <book>
  8. <bookname>Android教程1</bookname>
  9. <bookauthor>Frankie1</bookauthor>
  10. </book>
  11. <book>
  12. <bookname>Android教程2</bookname>
  13. <bookauthor>Frankie2</bookauthor>
  14. </book>
  15. </books>
<?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按钮:
 
 

0

收藏

225篇文章,53W+人气,0粉丝