集合:xml元素之增删改查加遍历 使用jaxp
运行结果
person.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?><person>
<p1>
<name>zhangsan</name>
<age>20</age>
</p1>
<p1>
<name>xiaoquan</name>
<age>21</age>
</p1>
</person>
TestJaxp.java
package cn.test.jaxptes;
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 org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
public class TestJaxp {
public static void main(String[] args) throws Exception {
addSex();
listElement();
modifySex();
listElement();
selectSingle();
selectAll();
DelectSex();
listElement();
}
public static Document getDocument() throws Exception {
/*
* 1. 创建解析器工厂 2. 根据解析器工厂创建解析器 3. 解析xml 返回 document
*/
// 创建解析器工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory
.newInstance();
// 创建解析器
DocumentBuilder documentBuilder = builderFactory.newDocumentBuilder();
// 解析
Document document = documentBuilder.parse("src/person.xml");
return document;
}
// 遍历结点 把所有元素名打印出来
public static void listElement() throws Exception {
/*
* 1得到 document ----使用递归来实现----- 2. 得到根节点 3. 得到根节点的子节点 4. 得到根节点的子节点的子节点
*/
listIt(getDocument());
System.out.println();
}
private static void listIt(Node node) {
// 判断为元素类型的时候才打印
if (node.getNodeType() == Node.ELEMENT_NODE) {
System.out.print(node.getNodeName() + " ");
}
NodeList list = node.getChildNodes();
for (int i = 0; i < list.getLength(); i++) {
Node node1 = list.item(i);
// 继续得到node1的子节点
listIt(node1);
}
}
// 删除<sex></sex>节点
public static void DelectSex() throws Exception {
/*
* 1得到 document 2. 得到sex 3. 获取sex父节点 4. 使用父节点删除 removeChild方法 5. 回写xml
*/
// 得到sex元素
Document document = getDocument();
Node sex1 = document.getElementsByTagName("sex").item(0);
// 得到sex1父节点
Node p1 = sex1.getParentNode();
// 删除操作
p1.removeChild(sex1);
// 回写
TransformerFactory transformerFactory = TransformerFactory
.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult(
"src/person.xml"));
}
// 修改第一个p1下面的sex内容为nan
public static void modifySex() throws Exception {
/*
* 1 得到 document 2. 得到sex item方法 3. 修改sex里面的值 setTextContent 方法 4. 回写xml
*/
// 得到所有的sex元素
Document document = getDocument();
NodeList list = document.getElementsByTagName("sex");
// 使用下标 得到第一个sex元素
Node sex1 = list.item(0);
sex1.setTextContent("nan");
// 回写
TransformerFactory transformerFactory = TransformerFactory
.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult(
"src/person.xml"));
}
// 在第一个p1 下面 添加<sex>nv</sex>
public static void addSex() throws Exception {
/*
* 1得到 document 2. 得到第一个p1 得到所有p1,使用item方法下标得到 3. 创建sex标签 createELement
* 创建文本createTextNode 4. 把文本添加到sex下面 appendChild 5. 把sex添加到p1下面 6.
* 回写到xml文件里面
*/
Document document = getDocument();
// 得到所有的p1元素
NodeList list = document.getElementsByTagName("p1");
// 使用下标 得到第一个p1元素
Node p1 = list.item(0);
// 创建sex标签 createELement 创建文本createTextNode
Element sex1 = document.createElement("sex");
Text tex1 = document.createTextNode("nv");
// 把文本添加到sex下面
sex1.appendChild(tex1);
// 把sex添加到p1下面
p1.appendChild(sex1);
// 回写
TransformerFactory transformerFactory = TransformerFactory
.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult(
"src/person.xml"));
}
// 查询xml中 第一个name 元素的值
public static void selectSingle() throws Exception {
/*
* 1得到 document 2. 获得doucument 下所有的name元素 list 3. 用item方法 下标获取具体的元素 4.
* 得到具体的值, 使用getTextContent方法
*/
Document document = getDocument();
// 得到name元素
NodeList list = document.getElementsByTagName("name");
// 使用下标 得到第一个元素
Node name1 = list.item(0);
// 得到name里面具体的值
String s1 = name1.getTextContent();
System.out.println("挑选一个:" + s1);
}
// 查询xml内 所有name元素的值
public static void selectAll() throws Exception {
/*
* 1得到 document 2. 获得doucument 下 所有的name元素 list 3. 遍历 list
*/
// 得到name元素
NodeList list = getDocument().getElementsByTagName("name");
// 遍历
System.out.println("遍历所有:");
for (int i = 0; i < list.getLength(); i++) {
// 得到name
Node name1 = list.item(i);
// 输出 name 里面的值
String s = name1.getTextContent();
System.out.println(s);
}
}
}