文章目录
- 一.DOM(Document Object Model)基本介绍
- 二. java 编码实现解析xml
- 1.xml文件的内容
- 2.XML与java对象之间的转换
一.DOM(Document Object Model)基本介绍
一个XML文件加载进内存的时候,在内存中形成所谓的一种树状结构
【优点】
- 形成了树结构,直观易于理解,代码更易编写。
- 解析过程中树结构保存在内存中,方便修改
【缺点】
- 当XML文件较大的时候,最内存耗费比较大,容易影响解析性能并且可能会造成内存溢出。
二. java 编码实现解析xml
1.xml文件的内容
<?xml version="1.0" encoding="UTF-8"?>
<root>
<person id="1">
<name>Tom</name>
<age>20</age>
</person>
<person id="2">
<name>Mary</name>
<age>25</age>
</person>
</root>
2.XML与java对象之间的转换
package test_dom;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import java.io.File;
import java.io.IOException;
public class Test {
public static void main(String[] args) {
try {
// 获取 DOM 解析器工厂实例
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 获取 DOM 解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析XML文件
Document doc = builder.parse(new File("C:\\Users\\mats\\IdeaProjects\\xmlParse\\src\\resource\\xml\\dom_test.xml"));
// 获取根节点
Element root = doc.getDocumentElement();
// 获取 person 节点列表
NodeList personList = root.getElementsByTagName("person");
// 遍历 person 节点列表
for (int i = 0; i < personList.getLength(); i++) {
Node node = personList.item(i);
// 判断当前 person 节点是否为 id=2 的节点
if (node instanceof Element && "2".equals(((Element) node).getAttribute("id"))) {
Element person = (Element) node;
// 修改 age 节点的值
NodeList ageList = person.getElementsByTagName("age");
if (ageList.getLength() > 0) {
//获取节点
System.out.print(ageList.item(0).getNodeName() + ":");
//获取节点值
System.out.println(ageList.item(0).getFirstChild().getNodeValue());
Element age = (Element) ageList.item(0);
age.setTextContent("30");
}
}
}
// 将修改后的文档写回到原文件
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("C:\\Users\\mats\\IdeaProjects\\xmlParse\\src\\resource\\xml\\dom_test_new.xml"));
transformer.transform(source, result);
System.out.println("XML文件修改成功!");
} catch (ParserConfigurationException | IOException | TransformerException | org.xml.sax.SAXException e) {
e.printStackTrace();
}
}
}