一、前言
1、使用工具:eclipse 環境:JDK-11
2、類說明:共四個類:Zen | Shan | Gai | Cha (一個類只做一件事,簡單明了)
3、引用jar包:dom4j-1.6.1.jar
4、反饋方式:郵箱 xiang.jia.kang147@Gmail.com
5、使用的源XML名為:Humen.xml 內容如下
二、源碼
1、在源XML基礎上添加新的 節點、屬性、文本內容
/**
* 作者:向家康
* 版權所有 禁止轉發
*/
package 正式版.XML.增刪改查;
import java.io.FileWriter;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/**
* 創作於 2019年9月23日 下午10:32:48
* 此類描述: XML 添加節點 屬性 文本內容
*/
public class Zen {
public static void main(String[] args) throws Exception {
Document doc = new SAXReader().read("src/正式版/XML/增刪改查/Humen.xml");
Element root = doc.getRootElement();//得到根節點
Element San = root.addElement("Hum");//用根節點root創建一個Hum節點 -- 添加節點
Element name = San.addElement("name");//給新的Hum創建子節點 name和age --添加子節點
Element age = San.addElement("age");
name.addAttribute("id", "003");//給name附上屬性和屬性值 --添加屬性
name.setText("老胡");//設置name標簽內文本內容 --添加文本
age.setText("20");//設置age標簽內文本內容
//這里是保存,路徑相同相當於是更新內容 (文檔有變動都需要此操作)
OutputFormat format = new OutputFormat();
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new FileWriter("src/正式版/XML/增刪改查/Humen.xml"),format);
writer.write(doc);
writer.close();
System.out.println("添加節點成功!!");
}
}
2、在源XML基礎上 刪除指定 節點、屬性、文本內容
/**
* 作者:向家康
* 版權所有 禁止轉發
*/
package 正式版.XML.增刪改查;
import java.io.FileWriter;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/**
* 創作於 2019年9月23日 下午10:33:04
* 此類描述: XML刪除 指定 節點 屬性 文本
*/
public class Shan {
public static void main(String[] args) throws Exception {
Document doc = new SAXReader().read("src/正式版/XML/增刪改查/Humen.xml");//得到文檔
Element root = doc.getRootElement();//得到根節點
List<Element> list = root.elements();//得到根節點下的所有兒子節點【Hum】
//刪節點操作
Element H= list.get(2).element("name");//通過第三個Hum,找到name節點
H.detach();//刪除第三個Hum中的name節點(精確刪節點)
Element H2= list.get(2);//得到第三個Hum節點
H2.detach();// 刪除第三個Hum節點--刪整個節點(誅九族)
//刪屬性操作 (一般不會刪屬性值保留屬性的,如有此需求,直接修改屬性值為空就好了)
Attribute arr = H.attribute("id");//從孫子name腦殼上找到id屬性
arr.detach();//刪除這個 id==003
//第二種方式 通過父節點調用remove() 可以刪子節點 屬性 文本 怎么方便怎么用
//這里是保存,路徑相同相當於是更新內容
OutputFormat format = new OutputFormat();
format.setEncoding("UTF-8");
XMLWriter w = new XMLWriter(new FileWriter("src/正式版/XML/增刪改查/Humen.xml"),format);
w.write(doc);
w.close();
System.out.println("成功");
}
}
3、在源XML基礎上 修改指定 節點名、屬性值、文本內容
/**
* 作者:向家康
* 版權所有 禁止轉發
*/
package 正式版.XML.增刪改查;
import java.io.FileWriter;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/**
* 創作於 2019年9月23日 下午10:33:14
* 此類描述: 修改 節點名 屬性值 文本內容
*/
public class Gai {
public static void main(String[] args) throws Exception {
Document doc = new SAXReader().read("src/正式版/XML/增刪改查/Humen.xml");//得到文檔對象
Element root = doc.getRootElement();//得到根節點
List<Element> list = root.elements();//得到根節點下的所有兒子節點【Hum】
Element H= list.get(2).element("name");//通過第三個Hum,找到name節點
H.setName("666");//修改節點名稱
Attribute arr = H.attribute("id");//從name節點找到id屬性
arr.setValue("055");//修改id為055 -修改屬性(一般不會修改屬性名保留屬性值,可刪除屬性添加屬性來實現)
Element H2 = list.get(2).element("age");//得到老胡年齡
H2.setText("18");//修改age為18 -修改內容
//這里是保存,路徑相同相當於是更新內容
OutputFormat format = new OutputFormat();
format.setEncoding("UTF-8");
XMLWriter w = new XMLWriter(new FileWriter("src/正式版/XML/增刪改查/Humen.xml"),format);
w.write(doc);
w.close();
System.out.println("成功");
}
}
4、在源XML基礎上 查詢指定 節點名、屬性及屬性值、文本內容
/**
* 作者:向家康
* 版權所有 禁止轉發
*/
package 正式版.XML.增刪改查;
import java.io.File;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
/**
* 創作於 2019年9月23日 下午10:33:27
* 此類描述: 查詢 節點名 節點屬性和屬性值 文本內容
*/
public class Cha {
public static void main(String[] args) throws Exception {
Document doc = new SAXReader().read(new File("src/正式版/XML/增刪改查/Humen.xml"));
Element root = doc.getRootElement();//得到根節點
List<Element> E = root.elements();//得到子節點全體
for(int i=0;i<E.size();i++) {
System.out.println("第"+(i+1)+"節點名"+E.get(i).getName());
}
//得到第一個Hum里面的 子節點名 屬性 屬性值 (為了打印好看才調getName,增刪改時不用調)
Element N = E.get(0).element("name");//得到第一個Hum節點中的name節點
Element N2 = E.get(0).element("age");//得到第一個Hum節點中的age節點
System.out.print("節點名:"+N.getName());
Attribute D = N.attribute("id"); //多個屬性時使用集合 List<Attribute> D = N.attributes(); 再遍歷
System.out.print(" 屬性:"+D.getName()+" 屬性值:"+D.getValue());
System.out.println("\n\tname 內容:"+N.getText()+" age 內容:"+N2.getText());
//方式二 Xpath 路徑語言 此文暫不呈上,見諒,本文面向大眾。
}
}
查詢結果:
源碼可以直接粘貼使用,
但注意刪改的時候,不要直接運行,
比如刪了某元素,后面改和查可能找不到了節點了報錯
建議:看明白了,再操作。