<?xml version="1.0" encoding="UTF-8" standalone="no"?><person>
<p1>
<name>zhangsan</name>
<age>20</age>
<gender>female</gender>
<gender>male</gender></p1>
<p1>
<name>lisi</name>
<age>18</age>
<age>30</age>
</p1>
</person>
注意写好xml的文件声明
package TestJaxp;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
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 java.io.IOException;
// 实现对 xml 增删改查功能
// selectAll();
// selectSin();
// addGender();
// modifyGender();
public class Jaxp { // 利用Jaxp实现对xml的正删改查功能
// 使用递归遍历xml的所有元素
public static void listElement() throws Exception {
/*
1. 创建解释工程
2. 创解释器
3. 解析xml, 返回document
4. 得到gender元素
5. 得到gender元素的父节点
6. 删除找出 removeChild()
7. 回写xml
8. 系统提示
*/
// 1. 创建解释工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
// 2. 创建解释器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
// 3. 解析xml, 返回document
Document document = builder.parse("src/scratch.xml");
// 调用遍历方法
list1(document);
}
// 创建一个遍历方法
public static void list1(Node node) {
// 判断元素时候才打印
if(node.getNodeType() == Node.ELEMENT_NODE) {
System.out.println(node.getNodeName());
}
// 得到子层节点
NodeList list = node.getChildNodes();
// 遍历list
for (int i = 0; i < list.getLength(); i++) {
// 得到一个节点
Node node1 = list.item(i);
// 继续得到node子节点
// node1.getChildNodes();
list1(node1);
}
}
// 删除一个具体的元素
public static void deleteGender() throws Exception {
/*
1. 创建解释工程
2. 创解释器
3. 解析xml, 返回document
4. 得到gender元素
5. 得到gender元素的父节点
6. 删除找出 removeChild()
7. 回写xml
8. 系统提示
*/
// 1. 创建解释工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
// 2. 创建解释器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
// 3. 解析xml, 返回document
Document document = builder.parse("src/scratch.xml");
// 4. 得到一个gender 得到所有所有gender,使用item方法下标得到)
Node gender1 = document.getElementsByTagName("gender").item(0);
// 得到gender内容
Node p1 = gender1.getParentNode();
// 删除操作
p1.removeChild(gender1);
// 回写xml
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/scratch.xml"));
// 9. 系统提示
System.out.println("Success!");
}
// 修改一个具体元素的内容
public static void modifyGender() throws Exception {
/*
1. 创建解释工厂
2. 创建解释器
3. 解析xml, 返回document
4. 得到gender ,item方法
5. 修改gender的值 setTextContent方法
6. 回写xml
*/
// 1. 创建解释工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
// 2. 创建解释器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
// 3. 解析xml, 返回document
Document document = builder.parse("src/scratch.xml");
// 4. 得到一个gender 得到所有所有gender,使用item方法下标得到)
Node gender1 = document.getElementsByTagName("gender").item(0);
// 修改gender内容
gender1.setTextContent("male");
// 回写xml
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/scratch.xml"));
// 9. 系统提示
System.out.println("Success!");
}
// 添加一个性别元素
public static void addGender() throws ParserConfigurationException, IOException, SAXException, TransformerException {
/*
1. 创建解释工厂
2. 创建解释器
3. 解析xml, 返回document
4. 得到一个p1 (得到所有所有p1,使用item方法下标得到)
5. 创建gender标签createElement
6. 把文本添加到gender下面的appendChild
7. 把gender添加到一个p1下面
8. 回写xml
* */
// 1. 创建解释工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
// 2. 创建解释器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
// 3. 解析xml, 返回document
Document document = builder.parse("src/scratch.xml");
// 4. 得到一个p1 (得到所有所有p1,使用item方法下标得到)
NodeList list = document.getElementsByTagName("p1");
Node p1 = list.item(0);
// 5. 创建gender标签createElement
Element gender1 = document.createElement("gender");
// 6. 把文本添加到gender下面的appendChild
Text text1 = document.createTextNode("female");
gender1.appendChild(text1);
// 7. 把gender添加到一个p1下面
p1.appendChild(gender1);
// 8. 回写xml
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/scratch.xml"));
// 9. 系统提示
System.out.println("Success!");
}
// 查询xml中第一个name 的值
public static void selectSin() throws ParserConfigurationException, IOException, SAXException {
// 1. 创建解释器工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
// 2. 创建解释器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
// 3. 解析xml的,返回document
Document document = builder.parse("src/scratch.xml");
// 4. 得到name元素
NodeList list = document.getElementsByTagName("name");
// 5. 使用返回集合,里面的方法item,下标获取具体元素
Node name1 = list.item(0);
// 6. 得到具体的值,调用getTextContent方法
String s1 = name1.getTextContent();
System.out.println(s1);
}
// 查询所有name 元素的值
public static void selectAll() throws Exception {
/* 查询所有name 元素的值
*
* 1. 创建解析器工厂
* 2. 更具解析器工厂创建解析器
* 3. 解析器xml反悔啊document
* */
// 创建解析器工厂
DocumentBuilderFactory buildFactory = DocumentBuilderFactory.newInstance();
// 创建解析器
DocumentBuilder builder = buildFactory.newDocumentBuilder();
// 解析xml返回doc文档
Document document = builder.parse("src/scratch.xml");
// 将name元素
NodeList list = document.getElementsByTagName("name");
// 遍历集合
for (int i = 0; i < list.getLength(); i++) {
Node name1 = list.item(i); // 得到一个name元素
// 得到name元素里面的值
String s = name1.getTextContent();
System.out.println(s);
}
}
}
之后再创建测试类对功能进行测试
import java.io.IOException;
public class Test{
public static void main(String[] args) throws Exception {
Jaxp.listElement();
}
}
经测试,所有功能都能实现。
总结: