Java之DOM4J解析XML 实现 XML文件数据的增删改查方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38225558/article/details/82747676

注意:需要导入 dom4j.jar 包

下面是我的Persons.xml文件数据

<?xml version="1.0" encoding="utf-8"?>
<persons>
	<person id="0">
		<name>翠花</name>
		<age>18</age>
		<sex>女</sex>
	</person>
	<person id="1">
		<name>老王</name>
		<age>20</age>
		<sex>男</sex>
	</person>
</persons>

增删改查:

/**
 * DOM4J解析XML 
 * XML文件数据的增删改查
 * @author 郑清
 */
public class Dom4jDemo {

	static File url = new File("E:/eclipse-workspace/JavaEE_workspace/Day34XML/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());*/
	}

	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文件是被加载到内存中 修改也是在内存中 ==》因此需要将内存中的数据同步到磁盘中
		XMLWriter writer = new XMLWriter(new FileWriter(url));//将内存数据关联给一个字符输出流
		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();
	}
	
}

猜你喜欢

转载自blog.csdn.net/qq_38225558/article/details/82747676