1. 加载 DOM 对象
import org.w3c.dom.Document;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
public class Demo02 {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("./res/stus.xml");
}
}
2. 遍历 XML 文件
代码:
public static void allEle(Node node){
NodeList chileNode = node.getChildNodes();//获取子节点
int length = chileNode.getLength();
if(length == 0){ // 没有子节点
System.out.print(node.getNodeValue());//输出node中的内容
}else{
System.out.print("<"+node.getNodeName());
NamedNodeMap nnm = node.getAttributes();
if(nnm.getLength() != 0){
for (int i = 0; i < nnm.getLength(); i++) {
Node node2 = nnm.item(i);
System.out.print(" "+node2.getNodeName());
System.out.print("=\""+node2.getNodeValue()+"\"");
}
}
System.out.print(">");
for (int i = 0; i <length ; i++) {
allEle(chileNode.item(i));
}
System.out.println("</"+node.getNodeName()+">");
}
}
3. 修改 DOM 并保存 XML 文件
修改前 XML 文件:
<?xml version="1.0" encoding="utf-8" ?>
<stus>
<stu>
<name id="1">张三</name>
<age>18</age>
<sex>女</sex>
</stu>
</stus>
代码:
package com.zth;
import org.w3c.dom.*;
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.FileOutputStream;
/**
* DOM 修改 XML 文件后写入磁盘
*/
public class Demo04 {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = factory.newDocumentBuilder();
Document document = documentBuilder.parse("res/stus.xml");
Element stus = (Element) document.getElementsByTagName("stus").item(0);
Element e = document.createElement("stu");
stus.appendChild(e);
Element newstu = (Element) document.getElementsByTagName("stus").item(0).getLastChild();
Element name = document.createElement("name");
Element age = document.createElement("age");
Element sex = document.createElement("sex");
name.setAttribute("id", "2");
Text nameText = document.createTextNode("咯咯");
Text ageText = document.createTextNode("18");
Text sexText = document.createTextNode("女");
newstu.appendChild(name);
newstu.appendChild(age);
newstu.appendChild(sex);
name.appendChild(nameText);
age.appendChild(ageText);
sex.appendChild(sexText);
saveXML(document);
}
public static void saveXML(Document document) throws Exception {
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource domSource = new DOMSource(document);
FileOutputStream out = new FileOutputStream("res/stus1.xml");
StreamResult streamResult = new StreamResult(out);
transformer.transform(domSource, streamResult);
out.close();
}
}
修改后:
<?xml version="1.0" encoding="utf-8" standalone="no"?><stus>
<stu>
<name id="1">张三</name>
<age>18</age>
<sex>女</sex>
</stu>
<stu><name id="2">咯咯</name><age>18</age><sex>女</sex></stu></stus>