Android中XML格式数据的简单使用

 源码:

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文件:

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。