java对xml节点属性的增删改查实现方法(具体注释版)
import java.io.File; import java.io.FileWriter; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class Dom4jDemo { static File url = new File("src/Persons.xml");// Persons.xml文件绝对路径 public static void main(String[] args) throws Exception { //dom4jGetElement();// dom4j原生方式解析xml //dom4jXPathGetElement();// dom4j Xpath方式解析xml dom4jUpdateElement();//修改数据 //dom4jAddElement();//添加数据 //dom4jDeleteElement();//删除数据 } public static void dom4jGetElement() throws Exception { // 获取一个Document对象 SAXReader saxReader = new SAXReader(); Document doc = saxReader.read(url); // 通过文档对象doc获取文档中的根节点 Element root = doc.getRootElement(); // 获取节点person List<Element> personList = root.elements();// 获取多个标签(即根节点下的子节点),返回集合对象 // 获取第1个节点 Element person = personList.get(0); // 获取第1个节点下的name元素 Element element = person.element("name"); // 获取name中的文本 System.out.println(element.getText()); System.out.println(person.elementText("name")); // 注意:只能获取一次节点值 第二次获取的值还是第一次的!! /* Element person2 = personList.get(1); Element element2 =person.element("name"); System.out.println(element2.getText());*/ OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("GBK"); XMLWriter writer = new XMLWriter(new FileWriter("./src/contact.xml"),format); } public static void dom4jXPathGetElement() throws Exception { // 获取一个Document对象 SAXReader saxReader = new SAXReader(); Document doc = saxReader.read(url); // 获取id为1的节点下的name元素 Node name = doc.selectSingleNode("/persons/person[@id = '1']/name[1]"); System.out.println(name.getText()); } public static void dom4jUpdateElement() throws Exception { // 获取一个Document对象 SAXReader saxReader = new SAXReader(); Document doc = saxReader.read(url); // 获取id为1的节点下的name元素 Node name = doc.selectSingleNode("/persons/person[@id = '1']/name[1]"); name.setText("这里是修改的id为1的节点下的name元素值"); // 注意:XML文件是被加载到内存中 修改也是在内存中 ==》因此需要将内存中的数据同步到磁盘中 OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("GBK"); XMLWriter writer = new XMLWriter(new FileWriter(url),format);//将内存数据关联给一个字符输出流 writer.write(doc); writer.close(); } public static void dom4jAddElement() throws Exception { // 获取一个Document对象 SAXReader saxReader = new SAXReader(); Document doc = saxReader.read(url); //获取根节点 Element root = doc.getRootElement(); //添加一个标签 即一个节点 Element person = root.addElement("person"); //添加值到节点中 person.addElement("name").setText("小星"); person.addElement("age").setText("16"); person.addElement("sex").setText("女"); // 注意:XML文件是被加载到内存中 修改也是在内存中 ==》因此需要将内存中的数据同步到磁盘中 //XMLWriter writer = new XMLWriter(new FileWriter(url)); // 按照指定格式将dom打印到xml文件中 //方式一: OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter writer = new XMLWriter(new FileWriter(url), format);//构造一个具有良好输出格式的XML输出对象 writer.write(doc); writer.close(); //方式二: // OutputFormat format = OutputFormat.createCompactFormat(); // writer = new XMLWriter(new FileWriter(url), format); // writer.write( doc ); // writer.close(); } public static void dom4jDeleteElement() throws Exception { // 获取一个Document对象 SAXReader reader = new SAXReader(); Document doc = reader.read(url); // 通过文档对象doc获取文档中的根节点 Element root = doc.getRootElement(); //获取第2个节点 Node person = root.selectSingleNode("/persons/person[2]"); //移出节点 root.remove(person); // 注意:XML文件是被加载到内存中 修改也是在内存中 ==》因此需要将内存中的数据同步到磁盘中 XMLWriter writer = new XMLWriter(new FileWriter(url)); // 按照指定格式将dom打印到xml文件中 OutputFormat format = OutputFormat.createPrettyPrint(); writer = new XMLWriter(new FileWriter(url), format ); writer.write( doc ); writer.close(); } }
xml文件 (文件名Person.xml)
<?xml version="1.0" encoding="GBK"?> <persons> <person id="0"> <name>翠花</name> <age>18</age> <sex>女</sex> </person> <person id="1"> <name>这里是修改的id为1的节点下的name元素值</name> <age>20</age> <sex>男</sex> </person> </persons>
需要的jar包及基本结构

人生永远无法回头,就连这平淡不惊的一幕,终有一日也会碎落满地

浙公网安备 33010602011771号