Android中XML格式資料的簡單使用

qingyezhu發表於2014-11-16

 原始碼:

package com.wangzhu.demo;

import java.io.IOException;
import java.io.StringWriter;

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.content.Context;

/**
 * XML,即可擴充套件標記語言(Extensible Markup Language),<br/>
 * 標準通用標記語言的子集,一種用於標記電子檔案使其具有結構性的標記語言。<br/>
 * 它可以用來標記資料、定義資料型別,是一種允許使用者對自己的標記語言進行定義的源語言。<br/>
 * 它非常適合全球資訊網傳輸,提供統一的方法來描述和交換獨立於應用程式或供應商的機構化資料。<br/>
 * 
 * 特點:<br/>
 * XML是一種標記語言,很類似HTML<br/>
 * XML的設計宗旨是傳輸資料,而非顯示資料<br/>
 * XML標籤沒有被預定義,您需要自行定義標籤<br/>
 * XML被設計為具有自我描述性<br/>
 * XML是W3C的推薦標準<br/>
 * 
 * 與HTML對比:<br/>
 * XML不是HTML的替代。<br/>
 * XML和HTML為不同的目的而設計:<br/>
 * XML被設計為傳輸和儲存資料,其焦點是資料的內容。<br/>
 * HTML被設計用來顯示資料,其焦點是資料的外觀。<br/>
 * HTML旨在顯示資訊,而XML旨在傳輸資訊。<br/>
 * 
 * XML的語法規則:<br/>
 * 在XML中,省略關閉標籤是非法的,所有元素都必須有關閉標籤。<br/>
 * XML標籤對大小寫敏感<br/>
 * XML必須正確地巢狀<br/>
 * XML文件必須有根元素<br/>
 * XML的屬性值須加引號<br/>
 * XML中空格會被保留<br/>
 * 
 * 使用Android平臺自帶的API載入XML資料,並且按照XML的結構將所有資料解析出來<br/>
 * 
 * 使用Android平臺自帶的API建立符合XML規範的資料,並且將XML資料輸出。<br/>
 * 
 * @author wangzhu
 * @date 2014年11月15日 下午11:38:10
 */
public class XMLUtils {
    private Context context;

    public XMLUtils(Context context) {
        this.context = context;
    }

    /**
     * 讀取XML檔案
     */
    public void readXML() {
        StringBuilder accum = new StringBuilder();
        try {
            DocumentBuilderFactory builderFactory = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder builder = builderFactory.newDocumentBuilder();
            Document document = builder.parse(context.getAssets().open(
                    "languages.xml"));
            // 獲取Languages標籤
            Element element = document.getDocumentElement();
            accum.append("cat=").append(element.getAttribute("cat"))
                    .append(",");
            NodeList list = element.getElementsByTagName("lan");
            for (int i = 0; i < list.getLength(); i++) {
                // 獲取每個lan標籤
                Element lan = (Element) list.item(i);
                accum.append("id=").append(lan.getAttribute("id")).append(",");
                accum.append("ide=")
                        .append(lan.getElementsByTagName("ide").item(0)
                                .getTextContent()).append(",");
                accum.append("name=")
                        .append(lan.getElementsByTagName("name").item(0)
                                .getTextContent()).append(";");
            }
            System.err.println("readXml: " + accum);
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 建立XML檔案
     */
    public void createXML() {
        try {
            DocumentBuilderFactory builderFactory = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder builder = builderFactory.newDocumentBuilder();
            // 建立文件物件
            Document document = builder.newDocument();

            // 建立根元素
            Element languages = document.createElement("Languages");
            languages.setAttribute("cat", "it");

            // 使用文件物件建立第一個子元素
            Element lan1 = document.createElement("lan");
            lan1.setAttribute("id", "1");
            Element name1 = document.createElement("name");
            name1.setTextContent("Java");
            // 新增子元素
            lan1.appendChild(name1);
            Element ide1 = document.createElement("ide");
            ide1.setTextContent("Eclipse");
            // 新增子元素
            lan1.appendChild(ide1);
            // 新增到根元素中
            languages.appendChild(lan1);

            // 使用文件物件建立第一個子元素
            Element lan2 = document.createElement("lan");
            lan2.setAttribute("id", "2");
            Element name2 = document.createElement("name");
            name2.setTextContent("Swift");
            // 新增子元素
            lan2.appendChild(name2);
            Element ide2 = document.createElement("ide");
            ide2.setTextContent("Xcode");
            // 新增子元素
            lan2.appendChild(ide2);
            // 新增到根元素中
            languages.appendChild(lan2);

            // 使用文件物件建立第一個子元素
            Element lan3 = document.createElement("lan");
            lan3.setAttribute("id", "3");
            Element name3 = document.createElement("name");
            name3.setTextContent("C#");
            // 新增子元素
            lan3.appendChild(name3);
            Element ide3 = document.createElement("ide");
            ide3.setTextContent("Visual Studio");
            // 新增子元素
            lan3.appendChild(ide3);
            // 新增到根元素中
            languages.appendChild(lan3);

            // 將languages作為根元素新增到文件中
            document.appendChild(languages);

            // 轉化
            TransformerFactory transformerFactory = TransformerFactory
                    .newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
            StringWriter sw = new StringWriter();
            transformer
                    .transform(new DOMSource(document), new StreamResult(sw));
            System.err.println("createXML: " + sw.toString());
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        } catch (TransformerException e) {
            e.printStackTrace();
        }
    }

}

 截圖:

Xml檔案:

相關文章