该例子主要使用SAXReader对XML进行操作,browse.xml是Ango框架里面的XML文件

采用两种方法,第一种的全部是iterator,另外一种采用了部分的for each

代码如下

  1. private void doBrowse(ServletContextEvent sce) {
  2. HashMap<String,BrowseBean1> map1 = new HashMap<String,BrowseBean1>();
  3. SAXReader saxReader = new SAXReader();
  4. Document document = null;
  5. // xml文件位置
  6. String path = this.getClass().getResource("/").getPath();
  7. //String pString = this.getClass().getResource(pString).getPath();
  8. String filePath = path.substring(0, path.length()- "classes/".length())+"browse.xml";
  9. //logger.warn(path);
  10. //logger.warn(filePath);
  11. try {
  12. document = saxReader.read(new File(URLDecoder.decode(filePath, "utf-8")));
  13. } catch (UnsupportedEncodingException e) {
  14. // 路径中文解码错误
  15. e.printStackTrace();
  16. } catch (DocumentException e) {
  17. e.printStackTrace();
  18. logger.warn("查询操作的xml文档异常");
  19. }
  20. List list = document.selectNodes("/BrowseElements/element/@flag");
  21. //logger.warn(list);
  22. Iterator iter = list.iterator();
  23.  
  24. /**
  25. * 自己写的方法,里面没有全部使用迭代器,用的for each 循环 start
  26. */
  27. while(iter.hasNext()){
  28. Attribute attribute = (Attribute) iter.next();
  29. String flag = attribute.getValue();
  30. List listTemp1 = document.selectNodes("/BrowseElements/element[@flag='"
  31. + flag + "']/@pageSize");
  32. Iterator iterTemp1 = listTemp1.iterator();
  33. int pageSize = 0;
  34. while (iterTemp1.hasNext()) {
  35. Attribute attribute1 = (Attribute) iterTemp1.next();
  36. pageSize = Integer.parseInt(attribute1.getValue());
  37. }
  38. BrowseBean1 browseBean1 = new BrowseBean1();
  39. browseBean1.setPageSize(pageSize);
  40. List listTemp2 = document.selectNodes("/BrowseElements/element[@flag='"
  41. + flag + "']/sql/@value");
  42. LinkedHashMap<String,BrowseBean2> map2 = new LinkedHashMap<String,BrowseBean2>();
  43. for(Object ob : listTemp2){
  44. //System.out.println(ob);
  45. String value = ((Attribute) ob).getValue();
  46. //System.out.println(value);
  47. BrowseBean2 browseBean2 = new BrowseBean2();
  48. List listTemp3 = document.selectNodes("/BrowseElements/element[@flag='"
  49. + flag + "']/sql[@value='"+value+"']/@key");
  50. for(Object ob1 : listTemp3){
  51. String key = ((Attribute) ob1).getValue();
  52. browseBean2.setKey(key);
  53. //System.out.println(key);
  54. }
  55. List listTemp4 = document.selectNodes("/BrowseElements/element[@flag='"
  56. + flag + "']/sql[@value='"+value+"']/struct");
  57. ArrayList<StructBean> struct = new ArrayList<StructBean>();
  58. for(Object ob2 : listTemp4){
  59. StructBean structBean = new StructBean();
  60. String structValueString = ((Element) ob2).getText();
  61. String sessionString = ((Element) ob2).attributeValue("session");
  62. String requestString = ((Element) ob2).attributeValue("request");
  63. structBean.setStructValue(structValueString);
  64. structBean.setSession(sessionString);
  65. structBean.setRequest(requestString);
  66. struct.add(structBean);
  67. }
  68. browseBean2.setStruct(struct);
  69. List listTemp5 = document.selectNodes("/BrowseElements/element[@flag='"
  70. + flag + "']/sql[@value='"+value+"']/param");
  71. ArrayList<ParamBean> param = new ArrayList<ParamBean>();
  72. for(Object ob3 : listTemp5){
  73. ParamBean paramBean = new ParamBean();
  74. String paramValue = ((Element) ob3).getText();
  75. String notNull = ((Element) ob3).attributeValue("notNull");
  76. String session = ((Element) ob3).attributeValue("session");
  77. String request = ((Element) ob3).attributeValue("request");
  78. String drop = ((Element) ob3).attributeValue("drop");
  79. String timeStart = ((Element) ob3).attributeValue("timeStart");
  80. String timeEnd = ((Element) ob3).attributeValue("timeEnd");
  81. paramBean.setParamValue(paramValue);
  82. paramBean.setNotNull(notNull);
  83. paramBean.setSession(session);
  84. paramBean.setRequest(request);
  85. paramBean.setDrop(drop);
  86. paramBean.setTimeStart(timeStart);
  87. paramBean.setTimeEnd(timeEnd);
  88. param.add(paramBean);
  89. //System.out.println(paramBean.getDrop());
  90. if(((Element) ob3).getText()==null||"".equals(((Element) ob3).getText())){
  91. System.out.println("该<element>paramBean为空,即不需要参数");
  92. //节点类似<param></param>,这样空的才行,但是实际上如果不需要传参数的话,根本就不用写<param>这个节点,那这个判断有点问题
  93. }else{
  94. System.out.println("paramValue为:"+paramBean.getParamValue());
  95. }
  96. }
  97. browseBean2.setParam(param);
  98. List listTemp6 = document.selectNodes("/BrowseElements/element[@flag='"
  99. + flag + "']/sql[@value='"+value+"']/title");
  100. ArrayList<String> title = new ArrayList<String>();
  101. for(Object ob4 : listTemp6){
  102. String titleString = ((Element) ob4).getText();
  103. title.add(titleString);
  104. //System.out.println(titleString);
  105. //System.out.println(title);
  106. }
  107. browseBean2.setTitle(title);
  108. List listTemp7 = document.selectNodes("/BrowseElements/element[@flag='"
  109. + flag + "']/sql[@value='"+value+"']/output");
  110. ArrayList<String> output = new ArrayList<String>();
  111. for(Object ob5 : listTemp7){
  112. output.add(((Element) ob5).getText());
  113. }
  114. browseBean2.setOutput(output);
  115. map2.put(value, browseBean2);
  116. }
  117. browseBean1.setMap(map2);
  118. map1.put(flag, browseBean1);
  119. System.out.println("遍历完browse.xml中的一个<element></element>");
  120. }
  121. /**
  122. * 自己写的方法,里面没有全部使用迭代器,用的for each 循环 end
  123. */
  124.  
  125. /**
  126. * Ango框架写法,全部使用iterator start
  127. */
  128. while (iter.hasNext()) {
  129. Attribute attribute = (Attribute) iter.next();
  130. String flag = attribute.getValue();
  131.  
  132. System.out.println(flag);
  133.  
  134. List listTemp1 = document.selectNodes("/BrowseElements/element[@flag='"
  135. + flag + "']/@pageSize");
  136. Iterator iterTemp1 = listTemp1.iterator();
  137. int pageSize = 0;
  138. while (iterTemp1.hasNext()) {
  139. Attribute attribute1 = (Attribute) iterTemp1.next();
  140. pageSize = Integer.parseInt(attribute1.getValue());
  141. }
  142. BrowseBean1 browseBean1 = new BrowseBean1();
  143. browseBean1.setPageSize(pageSize);
  144. List listTemp2 = document.selectNodes("/BrowseElements/element[@flag='"
  145. + flag + "']/sql/@value");
  146. Iterator iterTemp2 = listTemp2.iterator();
  147. LinkedHashMap<String,BrowseBean2> map2 = new LinkedHashMap<String,BrowseBean2>();
  148. while (iterTemp2.hasNext()) {
  149. Attribute attribute2 = (Attribute) iterTemp2.next();
  150. String value = attribute2.getValue();
  151. BrowseBean2 browseBean2 = new BrowseBean2();
  152. List listTemp3 = document.selectNodes("/BrowseElements/element[@flag='"
  153. + flag + "']/sql[@value='"+value+"']/@key");
  154. Iterator iterTemp3 = listTemp3.iterator();
  155. while (iterTemp3.hasNext()) {
  156. Attribute attribute3 = (Attribute) iterTemp3.next();
  157. String key = attribute3.getValue();
  158. browseBean2.setKey(key);
  159. }
  160. List listTemp4 = document.selectNodes("/BrowseElements/element[@flag='"
  161. + flag + "']/sql[@value='"+value+"']/struct");
  162. Iterator iterTemp4 = listTemp4.iterator();
  163. ArrayList<StructBean> struct = new ArrayList<StructBean>();
  164. while (iterTemp4.hasNext()) {
  165. Element element = (Element) iterTemp4.next();
  166. StructBean structBean = new StructBean();
  167. structBean.setStructValue(element.getText());
  168. structBean.setSession(element.attributeValue("session"));
  169. structBean.setRequest(element.attributeValue("request"));
  170. struct.add(structBean);
  171. }
  172. browseBean2.setStruct(struct);
  173. List listTemp5 = document.selectNodes("/BrowseElements/element[@flag='"
  174. + flag + "']/sql[@value='"+value+"']/param");
  175. Iterator iterTemp5 = listTemp5.iterator();
  176. ArrayList<ParamBean> param = new ArrayList<ParamBean>();
  177. while (iterTemp5.hasNext()) {
  178. Element element = (Element) iterTemp5.next();
  179. ParamBean paramBean = new ParamBean();
  180. paramBean.setParamValue(element.getText());
  181. paramBean.setNotNull(element.attributeValue("notNull"));
  182. paramBean.setSession(element.attributeValue("session"));
  183. paramBean.setRequest(element.attributeValue("request"));
  184. paramBean.setDrop(element.attributeValue("drop"));
  185. paramBean.setTimeStart(element.attributeValue("timeStart"));
  186. paramBean.setTimeEnd(element.attributeValue("timeEnd"));
  187. param.add(paramBean);
  188. }
  189. browseBean2.setParam(param);
  190. List listTemp6 = document.selectNodes("/BrowseElements/element[@flag='"
  191. + flag + "']/sql[@value='"+value+"']/title");
  192. Iterator iterTemp6 = listTemp6.iterator();
  193. ArrayList<String> title = new ArrayList<String>();
  194. while (iterTemp6.hasNext()) {
  195. Element element = (Element) iterTemp6.next();
  196. title.add(element.getText());
  197. }
  198. browseBean2.setTitle(title);
  199. List listTemp7 = document.selectNodes("/BrowseElements/element[@flag='"
  200. + flag + "']/sql[@value='"+value+"']/output");
  201. Iterator iterTemp7 = listTemp7.iterator();
  202. ArrayList<String> output = new ArrayList<String>();
  203. while (iterTemp7.hasNext()) {
  204. Element element = (Element) iterTemp7.next();
  205. output.add(element.getText());
  206. }
  207. browseBean2.setOutput(output);
  208. map2.put(value, browseBean2);
  209. }
  210. browseBean1.setMap(map2);
  211. map1.put(flag, browseBean1);
  212. }
  213. /**
  214. * Ango框架写法,全部使用iterator end
  215. */
  216.  
  217. ServletContext sc = sce.getServletContext();
  218. sc.setAttribute("adubBrowse", map1);
  219. logger.info("====================browse.xml已更新完毕====================");
  220.  
  221. }

  XML结构如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <BrowseElements><!-- xmlns="http://www.w3school.com.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3school.com.cn browse.xsd" -->
  3. <element flag="browse_code" pageSize="100" description="获取代码表">
  4. <!-- sql语句必须保证正确 -->
  5. <sql value="select * from code where `table` = ?">
  6. <param>table</param>
  7. <title>代码编号</title>
  8. <title>代码内容</title>
  9. <title>权重1</title>
  10. <title>权重2</title>
  11. <title>备注</title>
  12. <output>id</output>
  13. <output>content</output>
  14. <output>weight1</output>
  15. <output>weight2</output>
  16. <output>note</output>
  17. <output>column</output>
  18. <output>table</output>
  19. </sql>
  20. </element>
  21. <element flag="browse_teacherInformation" pageSize="10" description="对教师进行查询">
  22. <!-- sql语句必须保证正确 -->
  23. <sql value="select * from teacher_info where id like ? and name like ? and college=? " description="浏览教师">
  24. <param>id</param>
  25. <param>name</param>
  26. <param drop="true1" session="true">college</param>
  27. <title>职工号</title>
  28. <title>教师姓名</title>
  29. <title>性别</title>
  30. <title>所属单位</title>
  31. <title>来校日期</title>
  32. <output>id</output>
  33. <output>name</output>
  34. <output>sex</output>
  35. <output>college</output>
  36. <output>arrive_time</output>
  37. </sql>
  38. </element>
  39.  
  40. <element flag="browse_adminTeacherInformation" pageSize="10" description="对所有教师进行查询">
  41. <!-- sql语句必须保证正确 -->
  42. <sql value="select * from teacher_info where id like ? and name like ? and college like ? " description="浏览教师">
  43. <param>id</param>
  44. <param>name</param>
  45. <param>college</param>
  46. <title>序号</title>
  47. <title>职工号</title>
  48. <title>教师姓名</title>
  49. <title>性别</title>
  50. <title>所属单位</title>
  51. <title>来校日期</title>
  52. <output>id</output>
  53. <output>name</output>
  54. <output>sex</output>
  55. <output>college</output>
  56. <output>arrive_time</output>
  57. </sql>
  58. </element>
  59.  
  60. <element flag="browse_teacherPassword" pageSize="10" description="对教师密码进行模糊查询">
  61. <!-- sql语句必须保证正确 -->
  62. <sql value="select teacher_info.*,teacher_login.* from teacher_info ,teacher_login,admin_login where teacher_info.id=teacher_login.username and teacher_info.id like ? and teacher_info.name like ? and admin_login.username=? and teacher_info.college=? ORDER BY id DESC" description="查询教师密码">
  63. <param>id</param>
  64. <param>name</param>
  65. <param session="true" drop="true">userName</param>
  66. <param session="true" drop="true">college</param>
  67. <title>教师姓名</title>
  68. <title>职工号</title>
  69. <title>性别</title>
  70. <title>密码</title>
  71. <output>name</output>
  72. <output>id</output>
  73. <output>sex</output>
  74. <output>password</output>
  75. </sql>
  76. </element>
  77. <element flag="browse_administrator_teacherPassword" pageSize="10" description="对所有教师密码进行模糊查询">
  78. <!-- sql语句必须保证正确 -->
  79. <sql value="select teacher_info.*,teacher_login.* from teacher_info ,teacher_login,admin_login where teacher_info.college like ? and teacher_info.id=teacher_login.username and teacher_info.id like ? and teacher_info.name like ? and admin_login.username=? ORDER BY id DESC" description="查询所有教师密码">
  80. <param>college</param>
  81. <param>id</param>
  82. <param>name</param>
  83. <param session="true" drop="true">userName</param>
  84. <title>教师姓名</title>
  85. <title>职工号</title>
  86. <title>性别</title>
  87. <title>密码</title>
  88. <title>所属单位</title>
  89. <output>name</output>
  90. <output>id</output>
  91. <output>sex</output>
  92. <output>password</output>
  93. <output>college</output>
  94. </sql>
  95. </element>
  96. <element flag="browseNews" pageSize="10" description="对信息进行模糊查询">
  97. <!-- sql语句必须保证正确 -->
  98. <sql value="select * from news" description="信息查询">
  99. <param></param>
  100. <title>标题</title>
  101. <title>发布时间</title>
  102. <title>审核状态</title>
  103. <output>title</output>
  104. <output>publishTime</output>
  105. <output>status</output>
  106. <output>id</output>
  107. </sql>
  108. </element>
  109. <element flag="getNews" pageSize="10" description="对信息进行模糊查询">
  110. <!-- sql语句必须保证正确 -->
  111. <sql value="select * from news where status = 1 limit 5" description="信息查询">
  112. <output>id</output>
  113. <output>title</output>
  114. <output>publishTime</output>
  115. </sql>
  116. </element>
  117. </BrowseElements>
  118.   

  各类javaBean属性如下:

使用SAXReader对XML进行操作的更多相关文章

  1. VS2012 Unit Test —— 我对IdleTest库动的大手术以及对Xml相关操作进行测试的方式

    [1]我的IdleTest源码地址:http://idletest.codeplex.com/ [2]IdleTest改动说明:2013年10月份在保持原有功能的情况下对其动了较大的手术,首先将基本的 ...

  2. sql server中对xml进行操作

    一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和参数.为了更好地支持 XM ...

  3. 对XML的操作

    对XML的操作主要使用到的语法示例: using System.Xml; private static string XmlMarketingStaff = AppDomain.CurrentDoma ...

  4. Xml通用操作类

    using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Xml ...

  5. C# XML流操作简单实例

    这里我们先介绍操作XML文件的两个对象:XmlTextReader和XmlTextWriter打开和读取Xml文件使用到的对象就是XmlTextReader对象.下面的例子打开了与程序在同一路径下的一 ...

  6. SQL Server 2008 对XML 数据类型操作

    原文 http://www.cnblogs.com/qinjian123/p/3240702.html 一.前言 从 SQL Server 2005 开始,就增加了 xml 字段类型,也就是说可以直接 ...

  7. 我来讲讲在c#中怎么进行xml文件操作吧,主要是讲解增删改查!

    我把我写的四种方法代码贴上来吧,照着写没啥问题. 注: <bookstore> <book> <Id>1</Id> <tate>2010-1 ...

  8. 由“Jasperrpeorts 4.1.2升级到5.1.2对flex项目的解析”到AS3 带命名空间的XML的操作

    原文同步至:http://www.waylau.com/from-jasperrpeorts-4-1-2-upgraded-to-5-1-2-parsing-of-flex-projects-to-t ...

  9. 使用dom4j中SAXReader解析xml数据

    public ApiConfig(String configFilePath) throws DocumentException{ SAXReader reader = new SAXReader() ...

随机推荐

  1. Windows 下升级 node & npm 到最新版本

    查询 Node 的安装目录where node 升级 Node:在官网下载最新的安装包,直接安装即可.https://nodejs.org/ 升级 npmnpm install -g npm 使用 n ...

  2. c# 用XmlWriter写xml序列化

    using System.Text; using System.Xml; using System.Xml.Schema; using System.Xml.Serialization; using ...

  3. python三大器之装饰器的练习

    装饰器 加载顺序从下至上 执行顺序从上至下 ''' 多层装饰器 ''' def deco1(func): #func=deco2 def wrapper1(*args, **kwargs): '''t ...

  4. 『Go基础』第4节 VS Code配置Go语言开发环境

    VS Code 是微软开源的一款编辑器, 本文主要介绍如何使用VS Code搭建Go语言的开发环境. 下载与安装VS Code 官方下载地址: https://code.visualstudio.co ...

  5. 【转】基于FPGA的Sobel边缘检测的实现

    前面我们实现了使用PC端上位机串口发送图像数据到VGA显示,通过MATLAB处理的图像数据直接是灰度图像,后面我们在此基础上修改,从而实现,基于FPGA的动态图片的Sobel边缘检测.中值滤波.Can ...

  6. git 学习笔记 ---撤销修改

    自然,你是不会犯错的.不过现在是凌晨两点,你正在赶一份工作报告,你在readme.txt中添加了一行: $ cat readme.txt Git is a distributed version co ...

  7. redis的事务处理

    1.redis事务可以依次执行多个命令,并且带有以下三个重要的保证: 批量操作在发送exec命令前被放入队列缓存. 收到exec命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行. 在事 ...

  8. 使用二进制方式安装K8S时使用kubectl命令报错:The connection to the server localhost:8080 was refused - did you specify the right host or port?

    解决思路: kubectl 默认从 ~/.kube/config 配置文件获取访问 kube-apiserver 地址.证书.用户名等信息,如果没有配置该文件,或者该文件个别参数配置出错,执行命令时出 ...

  9. Java8 基础数据类型包装类-Long

     https://blog.csdn.net/u012562117/article/details/79023440 基础 //final修饰不可更改,每次赋值都是新建类(其中-128~127是通过L ...

  10. C#精粹--协变和逆变

    概念 协变和逆变来源于类型和类型之间的绑定,C#4.0开始在泛型的接口和委托上支持协变和逆变,不过在这个版本之前的委托也是支持协变和逆变的.比如数组就支持协变,但是这不是一个好的特性,这C#初期版本从 ...