集合: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);
}
}
}