测试dom4j创建、修改、遍历XML

java项目概览:

XmlManage.java

[java] view plaincopyprint?

  1. package com.jialin;
  2. import java.io.File;
  3. import java.io.FileWriter;
  4. import java.io.IOException;
  5. import java.util.HashMap;
  6. import java.util.Iterator;
  7. import java.util.List;
  8. import java.util.Map;
  9. import org.dom4j.Attribute;
  10. import org.dom4j.Document;
  11. import org.dom4j.DocumentException;
  12. import org.dom4j.DocumentHelper;
  13. import org.dom4j.Element;
  14. import org.dom4j.io.OutputFormat;
  15. import org.dom4j.io.SAXReader;
  16. import org.dom4j.io.XMLWriter;
  17. /**
  18. * 测试DOM4J创建,修改,遍历XML
  19. *
  20. * @author jialin
  21. *
  22. */
  23. public class XmlManager {
  24. public static void main(String[] args) {
  25. XmlManager xmlManager = new XmlManager();
  26. // 初始化xml文档
  27. Document doc = null;
  28. // 通过dom4j方法创建xml
  29. // doc = xmlManager.createXml();
  30. // XML字符串
  31. // String strXMl = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
  32. // + "<?xml-stylesheet type=\"text/xsl\" href=\"students.xsl\"?>"
  33. // + "<students><!--Students Table-->   <student stu=\"001\">"
  34. // + "<name>张三</name><age>18</age></student><student stu=\"002\">"
  35. // + "<name>李四</name><age>19</age></student></students>";
  36. // 通过字符串创建xml
  37. // doc = xmlManager.createDocumentByString(strXMl);
  38. // XMl输出路径
  39. // String outputPath = "xml/Students.xml";
  40. // 输出xml
  41. // xmlManager.saveDocument(doc, outputPath);
  42. // xml输入路径
  43. String inputPath = "xml/Students.xml";
  44. // 根据xml路径更改XML
  45. //xmlManager.ModifyXml(inputPath);
  46. // 根据xml路径获取doc
  47. doc = xmlManager.getDocument(inputPath);
  48. // 遍历XML
  49. xmlManager.traversalDocumentByElementIterator(doc);
  50. // xmlManager.traversalDocumentByVisitor(doc);
  51. //xmlManager.traversalDocumentByElements(doc);
  52. //xmlManager.traversalDocumentByselectNodes(doc, "/Students/student/name");
  53. }
  54. /**
  55. * 获取XML文件
  56. * @param inputPath
  57. * @return
  58. */
  59. public Document getDocument(String inputPath) {
  60. // 输入文件
  61. File inputXml = new File(inputPath);
  62. SAXReader saxReader = new SAXReader();
  63. Document document = null;
  64. try {
  65. document = saxReader.read(inputXml);
  66. } catch (DocumentException e) {
  67. e.printStackTrace();
  68. }
  69. return document;
  70. }
  71. /**
  72. * 通过Dom4j方法创建xml文档
  73. *
  74. * @return
  75. */
  76. public Document createXml() {
  77. Document doc = DocumentHelper.createDocument();
  78. // 创建ProcessingInstruction
  79. Map<String, String> inMap = new HashMap<String, String>();
  80. inMap.put("type", "text/xsl");
  81. inMap.put("href", "students.xsl");
  82. doc.addProcessingInstruction("xml-stylesheet", inMap);
  83. // 增加根节点
  84. Element studentsElement = doc.addElement("Students");
  85. // 增加注释
  86. studentsElement.addComment("Students Table");
  87. // 增加子节点
  88. Element stuElement = studentsElement.addElement("student");
  89. // 增加属性
  90. stuElement.addAttribute("stu", "001");
  91. // 增加名称节点
  92. Element nameElement = stuElement.addElement("name");
  93. // 设置名称节点的值
  94. nameElement.setText("张三");
  95. // 增加年龄节点
  96. Element ageElement = stuElement.addElement("age");
  97. // 设置年龄节点的值
  98. ageElement.setText("18");
  99. // 同上
  100. Element anotherStuElement = studentsElement.addElement("student");
  101. anotherStuElement.addAttribute("stu", "002");
  102. Element anotherNameElement = anotherStuElement.addElement("name");
  103. anotherNameElement.setText("李四");
  104. Element anotherAgeElement = anotherStuElement.addElement("age");
  105. anotherAgeElement.setText("19");
  106. return doc;
  107. }
  108. /**
  109. * 通过字符串创建xml文档
  110. * @param xmlStr
  111. * @return
  112. */
  113. public Document createDocumentByString(String xmlStr) {
  114. Document doc = null;
  115. try {
  116. // 通过字符串转换直接构建xml文档
  117. doc = DocumentHelper.parseText(xmlStr);
  118. } catch (DocumentException e) {
  119. e.printStackTrace();
  120. }
  121. return doc;
  122. }
  123. /**
  124. * 修改xml
  125. *
  126. * @param inputXmlPath
  127. */
  128. public void ModifyXml(String inputXmlPath) {
  129. // 获取文件
  130. File inputXml = new File(inputXmlPath);
  131. try {
  132. SAXReader saxReader = new SAXReader();
  133. // 创建document
  134. Document doc = saxReader.read(inputXml);
  135. // 读取Students/student下所有具有属性stu的元素
  136. List list = doc.selectNodes("/Students/student/@stu");
  137. Iterator iter = list.iterator();
  138. while (iter.hasNext()) {
  139. Attribute attribute = (Attribute) iter.next();
  140. if (attribute.getValue().equals("001"))
  141. attribute.setValue("0001");
  142. }
  143. list = doc.selectNodes("/Students/student");
  144. iter = list.iterator();
  145. while (iter.hasNext()) {
  146. Element element = (Element) iter.next();
  147. Iterator iterator = element.elementIterator("name");
  148. while (iterator.hasNext()) {
  149. Element nameElement = (Element) iterator.next();
  150. if (nameElement.getText().equals("张三"))
  151. nameElement.setText("王五");
  152. }
  153. }
  154. String outputPath = "xml/Students-Modified.xml";
  155. saveDocument(doc, outputPath);
  156. }
  157. catch (DocumentException e) {
  158. System.out.println(e.getMessage());
  159. }
  160. }
  161. /**
  162. * 将文档输出到文件保存,可指定格式化输出,可指定字符编码。
  163. *
  164. * @param document
  165. * @param outputFile
  166. */
  167. public void saveDocument(Document doc, String outputPath) {
  168. // 输出文件
  169. File outputFile = new File(outputPath);
  170. try {
  171. // 美化格式
  172. OutputFormat format = OutputFormat.createPrettyPrint();
  173. // 指定XML编码,不指定的话,默认为UTF-8
  174. format.setEncoding("UTF-8");
  175. XMLWriter output = new XMLWriter(new FileWriter(outputFile), format);
  176. output.write(doc);
  177. output.close();
  178. } catch (IOException e) {
  179. System.out.println(e.getMessage());
  180. }
  181. }
  182. /**
  183. * 普通方法遍历xml
  184. *
  185. * @param doc
  186. */
  187. public void traversalDocumentByElementIterator(Document doc) {
  188. // 获取根节点
  189. Element root = doc.getRootElement();
  190. // 枚举根节点下所有子节点
  191. for (Iterator ie = root.elementIterator(); ie.hasNext();) {
  192. System.out.println("======");
  193. Element element = (Element) ie.next();
  194. System.out.println(element.getName());
  195. // 枚举属性
  196. for (Iterator ia = element.attributeIterator(); ia.hasNext();) {
  197. Attribute attribute = (Attribute) ia.next();
  198. System.out.println(attribute.getName() + ":"
  199. + attribute.getData());
  200. }
  201. // 枚举当前节点下所有子节点
  202. for (Iterator ieson = element.elementIterator(); ieson.hasNext();) {
  203. Element elementSon = (Element) ieson.next();
  204. System.out.println(elementSon.getName() + ":"
  205. + elementSon.getText());
  206. }
  207. }
  208. }
  209. /**
  210. * 使用elements方法进行xml的读取,相当于条件查询,可以根据不同的节点,利用for循环查询该节点下所有的数据。
  211. *
  212. * @throws DocumentException
  213. */
  214. public static void traversalDocumentByElements(Document doc) {
  215. // 获取根节点
  216. Element root = doc.getRootElement();
  217. // 根据根节点,将根节点下 student中的所有数据放到list容器中。
  218. List list = root.elements("student");
  219. // 这种遍历方式,是jdk1.5以上的版本支持的遍历方式,嘿嘿试试
  220. for (Object obj : list) {
  221. Element el = (Element) obj;
  222. System.out.println("----------"+el.getName()+"-----------");
  223. // 获取name节点下所有的内容,存入listName容器中
  224. List listName = el.elements("name");
  225. // 获取age节点下所有的内容,存入age容器中
  226. List listAge = el.elements("age");
  227. for (int i=0;i<listName.size();i++) {
  228. Element elname = (Element) listName.get(i);
  229. // 获取name节点下的数据。
  230. System.out.println(elname.getName() + ": " + elname.getText());
  231. Element elage = (Element) listAge.get(i);
  232. // 获取age节点下的数据。
  233. System.out.println(elage.getName() + ": " + elage.getText());
  234. }
  235. }
  236. }
  237. /**
  238. * 使用selectNodes读取xml文件
  239. *
  240. * @param args
  241. * @throws DocumentException
  242. */
  243. public static void traversalDocumentByselectNodes(Document doc,
  244. String elementpath) {
  245. // 使用selectNodes获取所要查询xml的节点。
  246. List list = doc.selectNodes(elementpath);
  247. // 遍历节点,获取节点内数据。
  248. for (Iterator ie = list.iterator(); ie.hasNext();) {
  249. Element el = (Element) ie.next();
  250. System.out.println(el.getName() + ": " + el.getText());
  251. }
  252. }
  253. /**
  254. * 基于访问者模式遍历
  255. *
  256. * @param doc
  257. */
  258. public void traversalDocumentByVisitor(Document doc) {
  259. doc.accept(new MyVisitor());
  260. }
  261. }

MyVisitor.java

[java] view plaincopyprint?

    1. package com.jialin;
    2. import org.dom4j.Attribute;
    3. import org.dom4j.Element;
    4. import org.dom4j.ProcessingInstruction;
    5. import org.dom4j.VisitorSupport;
    6. /**
    7. * 定义自己的访问者类
    8. */
    9. public class MyVisitor extends VisitorSupport {
    10. /**
    11. * 对于属性节点,打印属性的名字和值
    12. */
    13. public void visit(Attribute node) {
    14. System.out.println("attribute : " + node.getName() + " = "
    15. + node.getValue());
    16. }
    17. /**
    18. * 对于处理指令节点,打印处理指令目标和数据
    19. */
    20. public void visit(ProcessingInstruction node) {
    21. System.out.println("PI : " + node.getTarget() + " "
    22. + node.getText());
    23. }
    24. /**
    25. * 对于元素节点
    26. * 如果包含文本内容,则打印元素的名字和元素的内容。如果不是,则只打印元素的名字
    27. */
    28. public void visit(Element node) {
    29. if (node.isTextOnly())
    30. System.out.println("element : " + node.getName() + " = "
    31. + node.getText());
    32. else
    33. System.out.println("《《《《《《" + node.getName() + "》》》》》》");
    34. }
    35. }
时间: 2024-10-13 14:36:46

测试dom4j创建、修改、遍历XML的相关文章

使用dom4j创建和解析xml文件

使用dom4j创建和解析xml文件 在项目开发中,我们经常会遇到xml文件的创建和解析从别人接口得到的xml文件,而我们最常使用的组件是dom4j. 下面我就以代码来讲解一下如何使用dom4j来创建xml文件. 1.项目结构 在这里我们要,引入dom4j中的两个jar包,分别是: dom4j-1.6.1: jaxen-1.1-beta-6: 2.简要介绍 >创建xml 的主要类 DocumentHelper document = DocumentHelper.createDocument();

Android 创建与解析XML(一)—— 概述

Android 是最常用的智能手机平台,XML 是数据交换的标准媒介,Android 中可以使用标准的XML生成器.解析器.转换器 API,对 XML 进行解析和转换. XML,相关有DOM.SAX.JDOM.DOM4J.Xerces.JAXP等一堆概念,但是很多人总是会弄混他们之间的关系,这对我们理解XML文件的创建和解析很不利.要挑选一个适合在Android平台上使用的XML解析方案,我们还是得先把这些概念厘清. XML基本概念 DOM(Document Object Model,文档对象模

dom4j 创建XML文件

package com.hengtian.util; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.dom4j.Attribute; import org.dom4j.Docu

dom4j创建xml

在前边介绍SAX,PULL等等既然能解析,当然也能生成.不过这里介绍dom4j创建xml文件,简单易懂. dom4j是独立的api,官网:http://www.dom4j.org/    可以去这下载jar包,里边也有详细的例子.. 在这里就进行简单的介绍,够用就行.. 1.创建document : Document document = DocumentHelper.createDocument(); 2.添加节点 // 创建根节点并添加进文档 Element root = document.

使用Dom4j创建XML文件

代码如下: 1 package xml; 2 3 import java.io.FileWriter; 4 import java.io.IOException; 5 import java.io.Writer; 6 import org.dom4j.Document; 7 import org.dom4j.DocumentHelper; 8 import org.dom4j.Element; 9 import org.dom4j.io.OutputFormat; 10 import org.d

dom4j创建xml报文并生成

我使用的是dom4j创建xml报文 1.创建root节点 Document document = DocumentHelper.createDocument(); Element root = DocumentHelper.createElement("RBSPMessage"); document.setRootElement(root); 2.在root节点下添加节点 Element Version = root.addElement("Version"); E

Android 创建与解析XML(五)—— Dom4j方式

分享一下我老师大神的人工智能教程吧.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net 1.Dom4j概述 dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections Framework and with full sup

2.遍历XML即添加修改节点

1.xml <?xml version="1.0" encoding="utf-8" ?> <stories> <story ac="98"> <title>A House in Aungier Street</title> <author> <name>Sheridan le Fanu</name> <nationality>Irish&

当xml中存在命名空间,dom4j解析以及写入xml文档时的乱码问题

最近公司项目开发中需要通过前台用户界面进行客户业务系统的部署(提供界面化操作,减少运维工作的难度),通过修改web.xml进行设置各个项目不同的信息配置. 开发过程中遇到2种问题,同时将解决方案备注上,以方便日后查看. 问题一:当xml中存在命名空间,三种处理办法(dom4j) 问题二:文件保存之后总是提示中文乱码问题 针对上面2个问题的解决方案进行汇总,解决方法主要还是来自于其他网络同行的博客. 第一个 问题主要参照 博客http://blog.sina.com.cn/s/blog_5cef6