Dom4j修改xml文件

创建Document文档对象  
     DocumentHelper.createDocument();

写出内容到xml文档
   XMLWriter writer = new XMLWriter(OuputStream, OutputFormat);
   writer.write(Document);

修改xml文档的API
增加:
    DocumentHelper.createDocument();//增加文档
    addElement("标签名");//增加标签
    addAttribute("属性名", “属性值”);//增加属性
    addText("文本内容");//增加文本
修改:
    Attribute.setValue("属性值");  // 修改属性值
    Element.addAttribute("同名的属性名", "属性值");//通过增加同名属性的方法,覆盖修改属性值
    Element.setText("文本内容");//修改文本内容
删除:
    Element.detach();//删除标签。自杀
    父标签.remove("子标签");//删除标签。他杀
    Atrribute.detach();//删除属性。自杀
    当前标签.remove("属性");//删除标签。remove
    
Demo:
     
     
  1. package com.dom4j.write;
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import org.dom4j.Attribute;
  5. import org.dom4j.Document;
  6. import org.dom4j.DocumentException;
  7. import org.dom4j.DocumentHelper;
  8. import org.dom4j.Element;
  9. import org.dom4j.io.OutputFormat;
  10. import org.dom4j.io.SAXReader;
  11. import org.dom4j.io.XMLWriter;
  12. import org.junit.After;
  13. import org.junit.Before;
  14. import org.junit.BeforeClass;
  15. import org.junit.Test;
  16. /**
  17. * 写出内容到xml文档
  18. * @author zhiyong
  19. *
  20. */
  21. public class Demo1 {
  22. public static Document document;
  23. /**
  24. * 首先加载或者创建一个Document对象
  25. * @throws DocumentException
  26. */
  27. @Before
  28. public void beforeTest() throws Exception{
  29. /*
  30. * 1.读取或者创建一个Document对象
  31. */
  32. //读取"/src/contact2.xml"文件
  33. SAXReader reader = new SAXReader();
  34. //获取Document对象
  35. document = reader.read(new File("./src/contact2.xml"));
  36. /**
  37. *DocumentHelper.createDocument();创建Document文档对象
  38. */
  39. // document = DocumentHelper.createDocument();
  40. }
  41. /*
  42. *2. 修改Document对象内容
  43. * 增加:标签、属性
  44. * 修改:属性值、文本
  45. * 删除:标签、属性
  46. */
  47. /**
  48. * 增加:标签、属性
  49. * @throws Exception
  50. */
  51. @Test
  52. public void testAdd() throws Exception {
  53. /*
  54. * 增加:标签
  55. */
  56. Element root = document.addElement("contactList");//一个xml文档只能存在一个根标签
  57. Element ele1 = root.addElement("contact");
  58. /*
  59. * 添加属性:
  60. */
  61. ele1.addAttribute("id", "001");
  62. ele1.addAttribute("name", "contactName");
  63. Element child01 = ele1.addElement("name");
  64. /*
  65. * 添加文本
  66. */
  67. child01.addText("木丁西");
  68. Element child02 = ele1.addElement("age");
  69. child02.addText("18");
  70. Element child03 = ele1.addElement("email");
  71. child03.addText("1012421396@qq.com");
  72. Element child04 = ele1.addElement("qq");
  73. child04.addText("1012421396");
  74. Element ele2 = root.addElement("contact");
  75. ele2.addAttribute("id", "002");
  76. Element child11 = ele2.addElement("name");
  77. child11.addText("刘先森");
  78. Element child12 = ele2.addElement("age");
  79. child12.addText("22");
  80. Element child13 = ele2.addElement("email");
  81. child13.addText("541247820@qq.com");
  82. Element child14 = ele2.addElement("qq");
  83. child14.addText("101242134");
  84. }
  85. /**
  86. * 修改:属性值、文本
  87. * @throws Exception
  88. */
  89. @Test
  90. public void testUpdate() throws Exception {
  91. /*
  92. * 修改属性值
  93. *方案1:1.得到标签对象 2.得到属性对象 3.修改属性值 【推荐】
  94. */
  95. //获取标签对象
  96. Element contactEle = document.getRootElement().element("contact");
  97. //得到属性对象
  98. Attribute idAttr = contactEle.attribute("id");
  99. //修改属性值
  100. idAttr.setValue("003");
  101. /*
  102. * 方案2:修改属性值:1.得到标签对象 2.直接修改【不推荐使用】
  103. */
  104. contactEle.setAttributeValue("id", "004");
  105. /*
  106. * 方法3:修改属性值:1.得到标签对象 2.通过增加同名属性的方法,覆盖修改属性值
  107. */
  108. contactEle.addAttribute("id", "005");
  109. /*
  110. * 修改文本
  111. *方案1:1.得到标签对象 2..修改文本
  112. */
  113. Element nameEle = document.getRootElement().element("contact").element("name");
  114. nameEle.setText("曾用名");
  115. }
  116. /**
  117. * 删除:标签、属性
  118. * @throws Exception
  119. */
  120. @Test
  121. public void testDelete() throws Exception {
  122. /*
  123. * 删除标签方式1:1.获取标签对象 2.删除(自杀)
  124. */
  125. /* //获取标签对象
  126. Element emailEle = document.getRootElement().element("contact").element("email");
  127. //删除标签。自杀
  128. emailEle.detach();*/
  129. /*
  130. * 删除标签方式2:1.获取标签对象的父标签 2.删除子标签
  131. */
  132. //拿到第2个contact标签对象,再获取“name”标签
  133. Element nameEle = document.getRootElement().elementByID("002").element("name");
  134. Element nameParent = nameEle.getParent();
  135. nameParent.remove(nameEle);
  136. /*
  137. * 删除属性方式1:1.找到属性标签对象 2.删除属性
  138. */
  139. //拿到第2个contact标签对象
  140. Element contactEle2 = (Element)document.getRootElement().elements("contact").get(1);
  141. Attribute idAttr = contactEle2.attribute("id");//获取id属性对象
  142. idAttr.detach();//自杀
  143. /*
  144. * 删除属性方式2:1.找到属性标签对象 2.remove删除对象
  145. */
  146. contactEle2.remove(idAttr);
  147. }
  148. /**
  149. * 3.最后把修改后的Document对象写出到xml文档中
  150. */
  151. @After
  152. public void testAfter() throws Exception {
  153. //指定文件输出的位置
  154. FileOutputStream out = new FileOutputStream("./src/contact4.xml");
  155. /*
  156. * 指定写出的格式
  157. */
  158. // OutputFormat format = OutputFormat.createCompactFormat();//紧凑的格式,去除了空格和换行。占用容量小。项目上线的时候用
  159. OutputFormat format = OutputFormat.createPrettyPrint();//漂亮格式,包含空格和换行。占用容量大。开发调试的时候用
  160. /*
  161. * 指定生成文档的编码格式
  162. * 同时影响了xml文档保存时的编码和xml文档声明的encoding的编码(xml解析时的编码)
  163. * 结论:使用该方法生成的XML文档可以避免中文乱码问题
  164. */
  165. format.setEncoding("utf-8");
  166. //创建写出对象
  167. // XMLWriter writer = new XMLWriter(out);
  168. XMLWriter writer = new XMLWriter(out, format);
  169. writer.write(document);
  170. //关闭资源原则:先开后关,后开后关
  171. writer.close();
  172. out.close();
  173. }
  174. }

效果:     

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值