zoukankan      html  css  js  c++  java
  • 使用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();
    	}
    }






  • 相关阅读:
    刷水题(四)
    C++如何调试
    刷水题(三)
    刷水题(二)
    虔诚的墓主人(BZOJ1227)(洛谷P2154)解题报告
    同余方程组(EXCRT)(luogu4777)
    数据结构——树状数组详解
    程序自动分析(NOI2015)(洛谷P1955)题解
    小胖的奇偶(Viojs1112)题解
    小胖守皇宫(VIJOS P1144 )题解
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299739.html
Copyright © 2011-2022 走看看