Android使用DOM读取与解析XML格式数据

Android使用DOM读取与解析XML格式数据

1. 何为XML?

简单说一下,XML是一种标记性语言,类似于网页开发的HTML语言,XML主要用于传输和存储数据,数据存放在用户自定义的标签之中,每个标签都必须要正确关闭,每个标签都可以具有属性,属性值必须在双引号之内,标签必须正确嵌套使用。下面列出一个XML文件为例:
languages.xml

<?xml version="1.0" encoding="utf-8"?>
<languages foo="bar">
    <lan id="1">
        <name>Java</name>
        <ide>Eclipse</ide>
    </lan>
    <lan>
        <name>Swift</name>
        <ide>XCode</ide>
    </lan>
    <lan>
        <name>C#</name>
        <ide>Visual Studio</ide>
    </lan>
</languages>

跟多关于XML的知识,请出门左转:
http://www.w3school.com.cn/xml/index.asp

DOM解析xml文件时,会将xml文件的内容以文档树的形式存放到内存中,然后用DOM API去遍历xml树,检索相应数据,方式较SAX要简单直观,但是对内存消耗较大。

2. 读取并解析XML数据

接下来的操作以读取解析assets目录下的languages.xml文件为例,代码及注释如下:

try {
        //创建Android的factory实例
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        //创建builder实例
        DocumentBuilder builder = factory.newDocumentBuilder();
        //将字节输入流解析为Document对象
        Document document = builder.parse(getAssets().open("languages.xml"));
        //取得文档的根节点元素及其内容,即:<languages>内容</languages>
        Element root = document.getDocumentElement();
        //根据标签名取得相应的元素节点及其内容,由于标签可能不止一个,返回一个节点列表对象
        NodeList list = root.getElementsByTagName("lan");
        for (int i = 0; i < list.getLength(); i++) {
            Element lan = (Element) list.item(i);
            StringBuilder stringBuilder = new StringBuilder();
            //直接取得该标签的属性值
            stringBuilder.append("id:" + lan.getAttribute("id") + ",");
            //根据标签名取得相应元素节点并取得其中的文本内容
            stringBuilder.append("name:" + lan.getElementsByTagName("name").item(0).getTextContent() + ",");
            stringBuilder.append("ide:" + lan.getElementsByTagName("ide").item(0).getTextContent());
            Log.i("XMLDATA", stringBuilder.toString());
        }

    } catch (ParserConfigurationException e) {
        e.printStackTrace();
    } catch (SAXException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值