使用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(); } }