Featured image of post Android基础 - XML解析之dom解析

Android基础 - XML解析之dom解析

解析原理

读取内容的情况下

DocumentBuilderFactory->DocumentBulder->Document->NodeList->Node->content

更改内容的情况下

TransformerFactory->Transformer->transform(Source, Result)

实例代码如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

package com.gowhich.xmlparser;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class DomXmlParserTest {

	@Test
	public void domXmlParser() throws Exception {
		DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
		DocumentBuilder documentBuilder = builderFactory.newDocumentBuilder();
		Document document = documentBuilder.parse("book.xml");
		NodeList nodeList = document.getElementsByTagName("书名");
		Node node = nodeList.item(1);
		String content = node.getTextContent();
		System.out.println(content);
	}

	@Test
	public void domXmlModifyParser() throws Exception {
		DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
		DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
		Document document = documentBuilder.parse("book.xml");
		NodeList nodeList = document.getElementsByTagName("书名");

		for (int i = 0; i < nodeList.getLength(); i++) {
			Node node = nodeList.item(i);
			String content = node.getTextContent();
			System.out.println(content);
		}

		Node node = nodeList.item(1);
		node.setTextContent("书名2-改");

		TransformerFactory transformerFactory = TransformerFactory.newInstance();
		Transformer transformer = transformerFactory.newTransformer();
		Source xmlSource = new DOMSource(document);
		Result outputTarget = new StreamResult("book.xml");
		transformer.transform(xmlSource , outputTarget);

	}
}

dom解析优缺点

优点:因为分配了一个树形结构,很容易的进行增加、删除、更改操作

缺点:如果要解析的文件过大,一次性在内存中分配一个树形结构,造成内存溢出

Licensed under CC BY-NC-SA 4.0
最后更新于 Jul 30, 2025 11:44 +0800