XML文件的写入和读取(解析)基于DOM4J工具

前端之家收集整理的这篇文章主要介绍了XML文件的写入和读取(解析)基于DOM4J工具前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

这两天做了个天气的小应用,需要用到百度的天气api,获取到的信息是一个xml文档。

所以就从网上查了一下相关的知识,就是关于怎么去解析出来xml文件的信息。

先放一个我自己写的例子,加了点注释,贴这里吧。

  1. package cn.yzy.test;
  2.  
  3. import java.util.List;
  4.  
  5. import java.io.BufferedReader;
  6. import java.io.File;
  7. import java.io.FileInputStream;
  8. import java.io.FileOutputStream;
  9. import java.io.IOException;
  10. import java.io.InputStreamReader;
  11. import java.io.StringReader;
  12. import java.util.Iterator;
  13.  
  14. import org.dom4j.Document;
  15. import org.dom4j.DocumentException;
  16. import org.dom4j.DocumentHelper;
  17. import org.dom4j.Element;
  18. import org.dom4j.io.OutputFormat;
  19. import org.dom4j.io.SAXReader;
  20. import org.dom4j.io.XMLWriter;
  21.  
  22. public class MyTest {
  23.  
  24. /**
  25. * DOM4J读写XML示例
  26. */
  27. public static void main(String[] args) {
  28. // 用变量保存一下xml文件的路径
  29. String path = "d:\\temp\\student.xml";
  30. // 创建xml的方法
  31. createXML(path);
  32. // 读取xml文件方法
  33. readXML(path);
  34.  
  35. // 把xml文件读取成String
  36. String xml = readFile(path);
  37. // 输出一下xml
  38. System.out.println(xml);
  39. // 把String的xml解析出来
  40. readXMLStr(xml);
  41. }
  42.  
  43. /**
  44. * readFile 读取文件到String
  45. *
  46. * @param path
  47. * @return
  48. */
  49. public static String readFile(String path) {
  50. String txt = "";
  51. try {
  52. // 读取文件
  53. File file = new File(path);
  54. // 创建输入流
  55. InputStreamReader isReader = new InputStreamReader(
  56. new FileInputStream(file),"utf-8");
  57. // 缓冲区
  58. BufferedReader bf = new BufferedReader(isReader);
  59. // 循环把文本读取出来
  60. String lineTxt = null;
  61. while ((lineTxt = bf.readLine()) != null) {
  62. txt += lineTxt;
  63. }
  64. } catch (Exception e) {
  65. e.printStackTrace();
  66. }
  67. // 最后把文本字符串返回
  68. return txt;
  69. }
  70.  
  71. /**
  72. * createXML 创建XML到指定目录
  73. *
  74. * @param path
  75. */
  76. public static void createXML(String path) {
  77. // 读取文件,检查文件是否存在,存在就不创建文件了。
  78. File file = new File(path);
  79.  
  80. if (!file.exists()) {
  81. try {
  82. // 创建xml文档,用DocumentHelper
  83. Document dc = DocumentHelper.createDocument();
  84. // 在文档里要加入元素节点
  85. // 添加 根节点 -> 学生信息
  86. Element root = dc.addElement("学生信息");
  87. // 在 学生信息节点 中 加入 学生
  88. Element stu1 = root.addElement("学生");
  89. // 可以设置属性,设置学生 sid 属性为 001
  90. stu1.addAttribute("sid","001");
  91. // 在学生里面加入子元素,键值对应
  92. Element name1 = stu1.addElement("姓名");
  93. name1.setText("张三");
  94. Element sex1 = stu1.addElement("性别");
  95. sex1.setText("男");
  96. Element stu2 = root.addElement("学生");
  97. stu2.addAttribute("sid","002");
  98. Element name2 = stu2.addElement("姓名");
  99. name2.setText("小红");
  100. Element sex2 = stu2.addElement("性别");
  101. sex2.setText("女");
  102.  
  103. // xml文档生成,准备写入文件文件路径和格式设置好。
  104. // 输出格式以及编码设置
  105. OutputFormat format = new OutputFormat("\n",true);
  106. format.setEncoding("utf-8");
  107. // 声明一个写文件的类
  108. XMLWriter writer = new XMLWriter(new FileOutputStream(path),format);
  109. // 写文件,完成后关闭
  110. writer.write(dc);
  111. writer.close();
  112. System.out.println("操作成功");
  113. } catch (IOException e) {
  114. e.printStackTrace();
  115. }
  116. } else {
  117. System.out.println("文件已存在");
  118. }
  119. }
  120.  
  121. /**
  122. * readXML 读取XML,从指定文件路径
  123. *
  124. * @param path
  125. */
  126. public static void readXML(String path) {
  127. try {
  128. // 输出文件是否存在
  129. System.out.println(new File(path).exists());
  130. // 新建一个读取xml文档的对象
  131. SAXReader reader = new SAXReader();
  132. // 将文件读入Document
  133. Document dc = reader.read(path);
  134.  
  135. System.out.println(dc.toString());
  136. // 读取根节点
  137. Element root = dc.getRootElement();
  138. // 遍历根节点下,所有子节点(仅能访问到一层)
  139. List nodes = root.elements();
  140. for (Iterator it = nodes.iterator(); it.hasNext();) {
  141. Element ele = (Element) it.next();
  142. System.out.println(ele.getName() + ele.attributeValue("sid"));
  143. System.out.println(ele.elementText("姓名"));
  144. System.out.println(ele.elementText("性别"));
  145. }
  146.  
  147. } catch (DocumentException e) {
  148. e.printStackTrace();
  149. }
  150. System.out.println("--- --- End --- ---");
  151. }
  152.  
  153. /**
  154. * readXMLStr 从String中读取XML信息
  155. *
  156. * @param xml
  157. */
  158. public static void readXMLStr(String xml) {
  159. try {
  160. System.out.println("--- --- readXMLStr --- ---");
  161.  
  162. // 同样是创建读取xml的类,但是读取方法参数改为:new StringReader(xml) 从字符串读取
  163. SAXReader reader = new SAXReader();
  164. Document dc = reader.read(new StringReader(xml));
  165.  
  166. System.out.println(dc.toString());
  167.  
  168. Element root = dc.getRootElement();
  169.  
  170. List nodes = root.elements();
  171. for (Iterator it = nodes.iterator(); it.hasNext();) {
  172. Element ele = (Element) it.next();
  173. System.out.println(ele.getName() + ele.attributeValue("sid"));
  174. System.out.println(ele.elementText("姓名"));
  175. System.out.println(ele.elementText("性别"));
  176. }
  177.  
  178. } catch (DocumentException e) {
  179. e.printStackTrace();
  180. }
  181. System.out.println("--- --- End --- ---");
  182. }
  183. }


以下是我从其他一个博客里参考的一些资料,深受启发:


网址:

http://www.blogjava.net/biiau/archive/2008/09/24/231005.html


部分DOM4J的解释 一.Document对象相关 1.读取XML文件,获得document对象. SAXReader reader = new SAXReader(); Document document = reader.read(new File("input.xml")); 2.解析XML形式的文本,得到document对象. String text = "<members></members>"; Document document = DocumentHelper.parseText(text); 3.主动创建document对象. Document document = DocumentHelper.createDocument(); Element root = document.addElement("members");// 创建根节点 二.节点相关 1.获取文档的根节点. Element rootElm = document.getRootElement(); 2.取得某节点的单个子节点. Element memberElm=root.element("member");// "member"是节点名 3.取得节点的文字 String text=memberElm.getText(); 也可以用: String text=root.elementText("name"); 这个是取得根节点下的name字节点的文字. 4.取得某节点下名为"member"的所有字节点并进行遍历. List nodes = rootElm.elements("member"); for (Iterator it = nodes.iterator(); it.hasNext();) { Element elm = (Element) it.next(); // do something } 5.对某节点下的所有子节点进行遍历. for(Iterator it=root.elementIterator();it.hasNext();){ Element element = (Element) it.next(); // do something } 6.在某节点下添加子节点. Element ageElm = newMemberElm.addElement("age"); 7.设置节点文字. ageElm.setText("29"); 8.删除某节点. parentElm.remove(childElm);// childElm是待删除的节点,parentElm是其父节点 9.添加一个CDATA节点. Element contentElm = infoElm.addElement("content"); contentElm.addCDATA(diary.getContent()); contentElm.getText(); // 特别说明:获取节点的CDATA值与获取节点的值是一个方法 contentElm.clearContent(); //清除节点中的内容,CDATA亦可 三.属性相关. 1.取得某节点下的某属性 Element root=document.getRootElement(); Attribute attribute=root.attribute("size");// 属性名name 2.取得属性文字 String text=attribute.getText(); 也可以用: String text2=root.element("name").attributeValue("firstname"); 这个是取得根节点下name字节点的属性firstname的值. 3.遍历某节点的所有属性 Element root=document.getRootElement(); for(Iterator it=root.attributeIterator();it.hasNext();){ Attribute attribute = (Attribute) it.next(); String text=attribute.getText(); System.out.println(text); } 4.设置某节点的属性文字. newMemberElm.addAttribute("name","sitinspring"); 5.设置属性文字 Attribute attribute=root.attribute("name"); attribute.setText("sitinspring"); 6.删除属性 Attribute attribute=root.attribute("size");// 属性名name root.remove(attribute); 四.将文档写入XML文件. 1.文档中全为英文,不设置编码,直接写入的形式. XMLWriter writer = new XMLWriter(new FileWriter("output.xml")); writer.write(document); writer.close(); 2.文档中含有中文,设置编码格式写入的形式. OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("GBK"); // 指定XML编码 XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format); writer.write(document); writer.close(); 五.字符串与XML的转换 1.将字符串转化为XML String text = "<members> <member>sitinspring</member> </members>"; Document document = DocumentHelper.parseText(text); 2.将文档或节点的XML转化为字符串. SAXReader reader = new SAXReader(); Document document = reader.read(new File("input.xml")); Element root=document.getRootElement(); String docXmlText=document.asXML(); String rootXmlText=root.asXML(); Element memberElm=root.element("member"); String memberXmlText=memberElm.asXML();

猜你在找的XML相关文章