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();
}