在Android应用开发中,生成XML文件是常见的需求,比如存储本地配置、生成数据交换格式等。DOM(Document Object Model)方式处理XML时,会将整个文档解析为树形结构,开发者可以直观地操作各个节点,非常适合创建结构明确的XML文件。下面我们就一步步讲解如何在Android中使用DOM方式创建XML。

DOM创建XML的核心步骤
使用DOM方式在Android中创建XML,整体流程可以分为以下几步:
- 获取DocumentBuilderFactory实例,用于创建文档构建器
- 通过DocumentBuilder创建空的Document文档对象
- 逐层创建XML的根节点、子节点,设置节点属性和文本内容
- 使用Transformer将Document对象转换成XML格式并输出到文件或流中
完整的代码示例
以下是一个创建包含学生信息的XML文件的完整示例,生成的XML结构如下:
import android.util.Log;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
import java.io.FileOutputStream;
public class XmlDomCreator {
public static void createStudentXml(File outputFile) {
try {
// 1. 获取DocumentBuilderFactory实例
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 2. 创建DocumentBuilder
DocumentBuilder builder = factory.newDocumentBuilder();
// 3. 创建空的Document对象
Document document = builder.newDocument();
// 设置文档的xml声明,standalone表示是否独立
document.setXmlStandalone(true);
// 4. 创建根节点students
Element rootElement = document.createElement("students");
document.appendChild(rootElement);
// 5. 创建第一个student子节点
Element student1 = document.createElement("student");
// 设置student节点的属性
student1.setAttribute("id", "1001");
// 创建name子节点
Element name1 = document.createElement("name");
name1.appendChild(document.createTextNode("张三"));
student1.appendChild(name1);
// 创建age子节点
Element age1 = document.createElement("age");
age1.appendChild(document.createTextNode("20"));
student1.appendChild(age1);
// 将student1添加到根节点
rootElement.appendChild(student1);
// 6. 创建第二个student子节点
Element student2 = document.createElement("student");
student2.setAttribute("id", "1002");
Element name2 = document.createElement("name");
name2.appendChild(document.createTextNode("李四"));
student2.appendChild(name2);
Element age2 = document.createElement("age");
age2.appendChild(document.createTextNode("21"));
student2.appendChild(age2);
rootElement.appendChild(student2);
// 7. 将Document转换为XML并输出到文件
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
// 设置输出属性,缩进换行
transformer.setOutputProperty("encoding", "UTF-8");
transformer.setOutputProperty("indent", "yes");
DOMSource domSource = new DOMSource(document);
StreamResult streamResult = new StreamResult(new FileOutputStream(outputFile));
transformer.transform(domSource, streamResult);
Log.d("XmlDomCreator", "XML文件创建成功,路径:" + outputFile.getAbsolutePath());
} catch (Exception e) {
Log.e("XmlDomCreator", "创建XML文件失败", e);
}
}
}代码关键点说明
在上述代码中,有几个需要注意的地方:
DocumentBuilderFactory是用于创建DocumentBuilder的工厂类,属于标准DOM API的一部分,Android已经内置了相关支持,不需要额外引入依赖。- 创建节点时使用
document.createElement方法,节点添加子节点使用appendChild方法,设置属性使用setAttribute方法,添加文本内容使用createTextNode方法,这些内容都需要遵循DOM的操作规范。 Transformer负责将内存中的Document对象转换成实际的XML字节流,通过StreamResult可以指定输出的目标,比如文件输出流、字符串输出流等。- 如果生成的XML需要包含中文,一定要设置编码为UTF-8,否则可能出现乱码问题。
注意事项
DOM方式会将整个XML文档加载到内存中,所以如果创建的XML文件非常大,可能会占用过多内存,这种情况下可以考虑使用SAX或者Pull方式生成XML。另外,在Android中操作文件需要申请存储权限,如果是Android 6.0及以上系统,还需要动态申请权限,否则可能无法成功写入文件。
DOM方式适合创建结构清晰、体积不大的XML文件,操作直观,学习成本低,是Android中创建XML的常用方式之一。
AndroidDOMXML创建DocumentBuilderNode修改时间:2026-06-01 00:39:16