使用dom4j技术对xml文档进行增删改练习(一)

整个流程如下面代码所以,并对一些重要代码意义做出详细解释:

import java.io.File;
import java.io.FileOutputStream;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;

/**
 * 修改xml内容
 * 增加:文档,标签 ,属性
 * 修改:属性值,文本
 * 删除:标签,属性
 * @author APPle
 *
 */
public class Demo3 {

	/**
	 * 增加:文档,标签 ,属性
	 */
	@Test
	public void test1() throws Exception{
		/**
		 * 1.创建文档(添加文档)
		 */
		Document doc = DocumentHelper.createDocument();
		/**
		 * 2.增加标签
		 */
		Element rootElem = doc.addElement("contactList");//谁在前面谁就是根标签
		//doc.addElement("contactList");
		Element contactElem = rootElem.addElement("contact");//在contactList(contactElem)前提下再加入标签。
		contactElem.addElement("name");
		/**
		 * 3.增加属性
		 */
		contactElem.addAttribute("id", "001");
		contactElem.addAttribute("name", "小杨");
		
		//把修改后的Document对象写出到xml文档中
		FileOutputStream out = new FileOutputStream("e:/contact.xml");//封装目的地
		OutputFormat format = OutputFormat.createPrettyPrint();//封装写出格式
		format.setEncoding("utf-8");//封装保存和解析编码一致,防止中文乱码。
		XMLWriter writer = new XMLWriter(out,format);//封装xml写出对象
		writer.write(doc);//把xml文档对象写出去
		writer.close();
	}
	
	/**
	 * 修改:属性值,文本
	 * @throws Exception
	 */
	@Test
	public void test2()	throws Exception{
		Document doc = new SAXReader().read(new File("./src/contact.xml"));
		
		/**
		 * 方案一: 修改属性值   1.得到标签对象 2.得到属性对象 3.修改属性值
		 */
		//1.1  得到标签对象
		/*
		Element contactElem = doc.getRootElement().element("contact");//得到当前标签下指定名称的【第一个】【子】标签
		//1.2 得到属性对象
		Attribute idAttr = contactElem.attribute("id");
		//1.3 修改属性值
		idAttr.setValue("003");
		*/
		/**
		 * 方案二: 修改属性值
		 */
		//1.1  得到标签对象
		/*
		Element contactElem = doc.getRootElement().element("contact");//得到当前标签下指定名称的【第一个】【子】标签
		//1.2 通过增加同名属性的方法,修改属性值。属性有个注意点:键相同,值覆盖
		contactElem.addAttribute("id", "004");
		*/
		
		/**
		 * 修改文本 1.得到标签对象 2.修改文本
		 */
		Element nameElem = doc.getRootElement().
			element("contact").element("name");
		nameElem.setText("李四");//会把原来的文本覆盖掉。
		
		
		
		FileOutputStream out = new FileOutputStream("e:/contact.xml");
		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding("utf-8");
		XMLWriter writer = new XMLWriter(out,format);
		writer.write(doc);
		writer.close();
	}
	
	
	/**
	 * 删除:标签,属性
	 * @throws Exception
	 */
	@Test
	public void test3() throws Exception{
		Document doc = new SAXReader().read(new File("./src/contact.xml"));
		
		/**
		 * 1.删除标签     1.1 得到标签对象  1.2 删除标签对象    
		 */
		// 1.1 得到标签对象
		/*
		Element ageElem = doc.getRootElement().element("contact")
					.element("age");
		
		//1.2 删除标签对象
		ageElem.detach();//删除方式一。自杀常用。
		//ageElem.getParent().remove(ageElem);//删除方式二。用父标签来删子标签。他杀
		*/
		/**
		 * 2.删除属性   2.1得到属性对象  2.2 删除属性
		 */
		//2.1得到属性对象
		//得到第二个contact标签
		Element contactElem = (Element)doc.getRootElement().
			elements().get(1);
		//2.2 得到他的属性对象
		Attribute idAttr = contactElem.attribute("id");
		//2.3 删除属性
		idAttr.detach();//自杀
		//idAttr.getParent().remove(idAttr);
		
		FileOutputStream out = new FileOutputStream("e:/contact.xml");
		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding("utf-8");
		XMLWriter writer = new XMLWriter(out,format);
		writer.write(doc);
		writer.close();
	}
}






原文地址:https://www.cnblogs.com/wanghang/p/6299739.html