第62章、XML文件-DOM操作(从零开始学Android)

来源:互联网 发布:最省电的软件下载 编辑:程序博客网 时间:2024/05/22 08:05

  DOM解析原理是把xml文件的各种部分都看成是节点,所有的节点因为层级关系最后形成了一颗节点树。而DOM的解析方式便是在内存中生存这棵树,并允许用户进行相关的操作。

一、设计界面

  1、布局文件

  打开activity_main.xml文件。

  输入以下代码:

<?xml version="1.0" encoding="utf-8"?><LinearLayout     xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <Button        android:id="@+id/save"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="保存XML数据(DOM)" />        <Button        android:id="@+id/read"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="读取XML数据(DOM)" /></LinearLayout>


二、程序文件

  打开“src/com.genwoxue.filedom/MainActivity.java”文件。

  然后输入以下代码:

package com.genwoxue.filedom;import java.io.File;import java.io.IOException;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.OutputKeys;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerConfigurationException;import javax.xml.transform.TransformerException;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;import android.os.Bundle;import android.os.Environment;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;import android.app.Activity;public class MainActivity extends Activity {private Button btnSave=null;private Button btnRead=null;private File file=null;private static final String FILENAME="book.xml";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btnSave=(Button)super.findViewById(R.id.save);btnRead=(Button)super.findViewById(R.id.read);btnSave.setOnClickListener(new OnClickListener(){        public void onClick(View v)        {          DocumentBuilder builder=null;        Document doc=null;        Transformer trans=null;                //判断外部存储卡是否存在        if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){        Toast.makeText(getApplicationContext(), "读取失败,SD存储卡不存在!", Toast.LENGTH_LONG).show();          return;        }                //初始化File        String path=Environment.getExternalStorageDirectory().toString()        +File.separator        +"genwoxue"        +File.separator        +FILENAME;        file=new File(path);                //如果当前文件的父文件夹不存在,则创建genwoxue文件夹    if(!file.getParentFile().exists())    file.getParentFile().mkdirs();                //实例化DocumentBuilderFactory        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();        //获取DocumentBuilder对象        try {builder=factory.newDocumentBuilder();} catch (ParserConfigurationException e) {e.printStackTrace();}        //获取Document对象        doc=builder.newDocument();        //建立节点        Element books=doc.createElement("books");        Element book=doc.createElement("book");        Element bookname=doc.createElement("bookname");        Element author=doc.createElement("author");        Element publisher=doc.createElement("publisher");                //添加内容        bookname.appendChild(doc.createTextNode("跟我学Android"));        author.appendChild(doc.createTextNode("蒋老夫子"));        publisher.appendChild(doc.createTextNode("人民邮电出版社"));                //设置节点关系        book.appendChild(bookname);        book.appendChild(author);        book.appendChild(publisher);                books.appendChild(book);        doc.appendChild(books);                //输出到文件        TransformerFactory transfactory=TransformerFactory.newInstance();                try {trans=transfactory.newTransformer();} catch (TransformerConfigurationException e) {e.printStackTrace();}                trans.setOutputProperty(OutputKeys.ENCODING,"UTF-8");        DOMSource source=new DOMSource(doc);        StreamResult result=new StreamResult(file);                try {trans.transform(source, result);} catch (TransformerException e) {e.printStackTrace();}        }});btnRead.setOnClickListener(new OnClickListener(){public void onClick(View v)        {DocumentBuilder builder=null;        Document doc=null;        StringBuffer info=null;        //判断外部存储卡是否存在        if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){        Toast.makeText(getApplicationContext(), "读取失败,SD存储卡不存在!", Toast.LENGTH_LONG).show();          return;        }                //初始化File        String path=Environment.getExternalStorageDirectory().toString()        +File.separator        +"genwoxue"        +File.separator        +FILENAME;        file=new File(path);                if(!file.exists()){        Toast.makeText(getApplicationContext(), "文件不存在!", Toast.LENGTH_LONG).show();          return;        }                //实例化DocumentBuilderFactory        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();        //获取DocumentBuilder对象        try {builder=factory.newDocumentBuilder();} catch (ParserConfigurationException e) {e.printStackTrace();}                //获取Document对象        try {doc=builder.parse(file);} catch (SAXException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}                //查找book节点        NodeList nodelist=doc.getElementsByTagName("book");                //获取节点文本内容        info=new StringBuffer();                for(int i=0;i<nodelist.getLength();i++){        Element element=(Element)nodelist.item(i);        info.append(info+element.getElementsByTagName("bookname").item(0).getFirstChild().getNodeValue()).append("☆☆☆");        info.append(element.getElementsByTagName("author").item(0).getFirstChild().getNodeValue()).append("☆☆☆");        info.append(element.getElementsByTagName("publisher").item(0).getFirstChild().getNodeValue()).append("☆☆☆");        }                Toast.makeText(getApplicationContext(), info.toString(), Toast.LENGTH_LONG).show();            }});}}


三、配置文件

  打开“AndroidManifest.xml”文件。

  然后输入以下代码:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.genwoxue.filedom"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="15" />    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name="com.genwoxue.filedom.MainActivity"            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></manifest>

注意:由于要进行读写外部存储卡操作,故而需要在AndroidManifest.xml文件中添加两项权限:

  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

四、运行结果