在Android应用开发中,XML是常见的数据交换格式,DOM解析作为基于树形结构的解析方式,能让开发者直观操作XML节点。

DOM解析基本原理
DOM即文档对象模型,解析时会将整个XML文档读入内存,构建一个由节点组成的树形结构,每个元素、属性、文本内容都会对应一个节点。开发者可以通过访问这些节点获取对应的数据,适合处理结构清晰、数据量不大的XML文件。
Android中DOM解析XML的步骤
1. 获取DocumentBuilder实例
首先需要获取DocumentBuilderFactory的实例,再通过它创建DocumentBuilder对象,这一步是解析的基础。
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import java.io.InputStream;
public class DomXmlParser {
// 获取DocumentBuilder实例
private DocumentBuilder getDocumentBuilder() throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
return factory.newDocumentBuilder();
}
}2. 加载XML文档生成Document对象
可以通过输入流加载XML数据,调用DocumentBuilder的parse方法将XML转换为Document对象,也就是内存中的树形结构。
public Document parseXml(InputStream inputStream) throws Exception {
DocumentBuilder builder = getDocumentBuilder();
// 解析输入流中的XML数据,生成Document对象
Document document = builder.parse(inputStream);
return document;
}3. 遍历节点获取数据
拿到Document对象后,就可以通过节点相关的方法遍历获取需要的数据,比如获取根节点、子节点列表,再读取节点的文本内容或属性。
public void readXmlData(Document document) {
// 获取XML的根节点
Node rootNode = document.getDocumentElement();
// 获取根节点下所有名为"user"的子节点
NodeList userNodeList = document.getElementsByTagName("user");
for (int i = 0; i < userNodeList.getLength(); i++) {
Node userNode = userNodeList.item(i);
// 获取user节点的子节点列表
NodeList childNodes = userNode.getChildNodes();
for (int j = 0; j < childNodes.getLength(); j++) {
Node childNode = childNodes.item(j);
// 判断节点类型,过滤掉空白文本节点
if (childNode.getNodeType() == Node.ELEMENT_NODE) {
String nodeName = childNode.getNodeName();
String nodeValue = childNode.getTextContent();
System.out.println("节点名:" + nodeName + ",节点值:" + nodeValue);
}
}
}
}注意事项
- DOM解析会将整个XML加载到内存,如果XML文件过大,可能会导致内存溢出,这种情况建议选择SAX或者Pull解析方式。
- 遍历节点时需要注意过滤空白文本节点,避免获取到无用的空内容。
- 如果是解析本地assets目录下的XML文件,可以通过
getAssets().open("文件名.xml")获取输入流。
完整调用示例
在实际使用时,将上面的方法组合起来就可以完成完整的解析流程,以下是在Activity中调用的示例:
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import java.io.InputStream;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
// 假设xml文件放在assets目录下,名为test.xml
InputStream inputStream = getAssets().open("test.xml");
DomXmlParser parser = new DomXmlParser();
// 解析XML得到Document对象
Document document = parser.parseXml(inputStream);
// 读取XML中的数据
parser.readXmlData(document);
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}以上就是Android中使用DOM解析XML的完整流程,按照步骤实现即可完成XML数据的解析工作。
DOM解析XML解析Android开发DocumentBuilderNode操作修改时间:2026-06-01 00:40:13