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

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

代码如下

 private void doBrowse(ServletContextEvent sce) {
HashMap<String,BrowseBean1> map1 = new HashMap<String,BrowseBean1>();
SAXReader saxReader = new SAXReader();
Document document = null;
// xml文件位置
String path = this.getClass().getResource("/").getPath();
//String pString = this.getClass().getResource(pString).getPath();
String filePath = path.substring(0, path.length()- "classes/".length())+"browse.xml";
//logger.warn(path);
//logger.warn(filePath);
try {
document = saxReader.read(new File(URLDecoder.decode(filePath, "utf-8")));
} catch (UnsupportedEncodingException e) {
// 路径中文解码错误
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
logger.warn("查询操作的xml文档异常");
}
List list = document.selectNodes("/BrowseElements/element/@flag");
//logger.warn(list);
Iterator iter = list.iterator(); /**
* 自己写的方法,里面没有全部使用迭代器,用的for each 循环 start
*/
while(iter.hasNext()){
Attribute attribute = (Attribute) iter.next();
String flag = attribute.getValue();
List listTemp1 = document.selectNodes("/BrowseElements/element[@flag='"
+ flag + "']/@pageSize");
Iterator iterTemp1 = listTemp1.iterator();
int pageSize = 0;
while (iterTemp1.hasNext()) {
Attribute attribute1 = (Attribute) iterTemp1.next();
pageSize = Integer.parseInt(attribute1.getValue());
}
BrowseBean1 browseBean1 = new BrowseBean1();
browseBean1.setPageSize(pageSize);
List listTemp2 = document.selectNodes("/BrowseElements/element[@flag='"
+ flag + "']/sql/@value");
LinkedHashMap<String,BrowseBean2> map2 = new LinkedHashMap<String,BrowseBean2>();
for(Object ob : listTemp2){
//System.out.println(ob);
String value = ((Attribute) ob).getValue();
//System.out.println(value);
BrowseBean2 browseBean2 = new BrowseBean2();
List listTemp3 = document.selectNodes("/BrowseElements/element[@flag='"
+ flag + "']/sql[@value='"+value+"']/@key");
for(Object ob1 : listTemp3){
String key = ((Attribute) ob1).getValue();
browseBean2.setKey(key);
//System.out.println(key);
}
List listTemp4 = document.selectNodes("/BrowseElements/element[@flag='"
+ flag + "']/sql[@value='"+value+"']/struct");
ArrayList<StructBean> struct = new ArrayList<StructBean>();
for(Object ob2 : listTemp4){
StructBean structBean = new StructBean();
String structValueString = ((Element) ob2).getText();
String sessionString = ((Element) ob2).attributeValue("session");
String requestString = ((Element) ob2).attributeValue("request");
structBean.setStructValue(structValueString);
structBean.setSession(sessionString);
structBean.setRequest(requestString);
struct.add(structBean);
}
browseBean2.setStruct(struct);
List listTemp5 = document.selectNodes("/BrowseElements/element[@flag='"
+ flag + "']/sql[@value='"+value+"']/param");
ArrayList<ParamBean> param = new ArrayList<ParamBean>();
for(Object ob3 : listTemp5){
ParamBean paramBean = new ParamBean();
String paramValue = ((Element) ob3).getText();
String notNull = ((Element) ob3).attributeValue("notNull");
String session = ((Element) ob3).attributeValue("session");
String request = ((Element) ob3).attributeValue("request");
String drop = ((Element) ob3).attributeValue("drop");
String timeStart = ((Element) ob3).attributeValue("timeStart");
String timeEnd = ((Element) ob3).attributeValue("timeEnd");
paramBean.setParamValue(paramValue);
paramBean.setNotNull(notNull);
paramBean.setSession(session);
paramBean.setRequest(request);
paramBean.setDrop(drop);
paramBean.setTimeStart(timeStart);
paramBean.setTimeEnd(timeEnd);
param.add(paramBean);
//System.out.println(paramBean.getDrop());
if(((Element) ob3).getText()==null||"".equals(((Element) ob3).getText())){
System.out.println("该<element>paramBean为空,即不需要参数");
//节点类似<param></param>,这样空的才行,但是实际上如果不需要传参数的话,根本就不用写<param>这个节点,那这个判断有点问题
}else{
System.out.println("paramValue为:"+paramBean.getParamValue());
}
}
browseBean2.setParam(param);
List listTemp6 = document.selectNodes("/BrowseElements/element[@flag='"
+ flag + "']/sql[@value='"+value+"']/title");
ArrayList<String> title = new ArrayList<String>();
for(Object ob4 : listTemp6){
String titleString = ((Element) ob4).getText();
title.add(titleString);
//System.out.println(titleString);
//System.out.println(title);
}
browseBean2.setTitle(title);
List listTemp7 = document.selectNodes("/BrowseElements/element[@flag='"
+ flag + "']/sql[@value='"+value+"']/output");
ArrayList<String> output = new ArrayList<String>();
for(Object ob5 : listTemp7){
output.add(((Element) ob5).getText());
}
browseBean2.setOutput(output);
map2.put(value, browseBean2);
}
browseBean1.setMap(map2);
map1.put(flag, browseBean1);
System.out.println("遍历完browse.xml中的一个<element></element>");
}
/**
* 自己写的方法,里面没有全部使用迭代器,用的for each 循环 end
*/ /**
* Ango框架写法,全部使用iterator start
*/
while (iter.hasNext()) {
Attribute attribute = (Attribute) iter.next();
String flag = attribute.getValue(); System.out.println(flag); List listTemp1 = document.selectNodes("/BrowseElements/element[@flag='"
+ flag + "']/@pageSize");
Iterator iterTemp1 = listTemp1.iterator();
int pageSize = 0;
while (iterTemp1.hasNext()) {
Attribute attribute1 = (Attribute) iterTemp1.next();
pageSize = Integer.parseInt(attribute1.getValue());
}
BrowseBean1 browseBean1 = new BrowseBean1();
browseBean1.setPageSize(pageSize);
List listTemp2 = document.selectNodes("/BrowseElements/element[@flag='"
+ flag + "']/sql/@value");
Iterator iterTemp2 = listTemp2.iterator();
LinkedHashMap<String,BrowseBean2> map2 = new LinkedHashMap<String,BrowseBean2>();
while (iterTemp2.hasNext()) {
Attribute attribute2 = (Attribute) iterTemp2.next();
String value = attribute2.getValue();
BrowseBean2 browseBean2 = new BrowseBean2();
List listTemp3 = document.selectNodes("/BrowseElements/element[@flag='"
+ flag + "']/sql[@value='"+value+"']/@key");
Iterator iterTemp3 = listTemp3.iterator();
while (iterTemp3.hasNext()) {
Attribute attribute3 = (Attribute) iterTemp3.next();
String key = attribute3.getValue();
browseBean2.setKey(key);
}
List listTemp4 = document.selectNodes("/BrowseElements/element[@flag='"
+ flag + "']/sql[@value='"+value+"']/struct");
Iterator iterTemp4 = listTemp4.iterator();
ArrayList<StructBean> struct = new ArrayList<StructBean>();
while (iterTemp4.hasNext()) {
Element element = (Element) iterTemp4.next();
StructBean structBean = new StructBean();
structBean.setStructValue(element.getText());
structBean.setSession(element.attributeValue("session"));
structBean.setRequest(element.attributeValue("request"));
struct.add(structBean);
}
browseBean2.setStruct(struct);
List listTemp5 = document.selectNodes("/BrowseElements/element[@flag='"
+ flag + "']/sql[@value='"+value+"']/param");
Iterator iterTemp5 = listTemp5.iterator();
ArrayList<ParamBean> param = new ArrayList<ParamBean>();
while (iterTemp5.hasNext()) {
Element element = (Element) iterTemp5.next();
ParamBean paramBean = new ParamBean();
paramBean.setParamValue(element.getText());
paramBean.setNotNull(element.attributeValue("notNull"));
paramBean.setSession(element.attributeValue("session"));
paramBean.setRequest(element.attributeValue("request"));
paramBean.setDrop(element.attributeValue("drop"));
paramBean.setTimeStart(element.attributeValue("timeStart"));
paramBean.setTimeEnd(element.attributeValue("timeEnd"));
param.add(paramBean);
}
browseBean2.setParam(param);
List listTemp6 = document.selectNodes("/BrowseElements/element[@flag='"
+ flag + "']/sql[@value='"+value+"']/title");
Iterator iterTemp6 = listTemp6.iterator();
ArrayList<String> title = new ArrayList<String>();
while (iterTemp6.hasNext()) {
Element element = (Element) iterTemp6.next();
title.add(element.getText());
}
browseBean2.setTitle(title);
List listTemp7 = document.selectNodes("/BrowseElements/element[@flag='"
+ flag + "']/sql[@value='"+value+"']/output");
Iterator iterTemp7 = listTemp7.iterator();
ArrayList<String> output = new ArrayList<String>();
while (iterTemp7.hasNext()) {
Element element = (Element) iterTemp7.next();
output.add(element.getText());
}
browseBean2.setOutput(output);
map2.put(value, browseBean2);
}
browseBean1.setMap(map2);
map1.put(flag, browseBean1);
}
/**
* Ango框架写法,全部使用iterator end
*/ ServletContext sc = sce.getServletContext();
sc.setAttribute("adubBrowse", map1);
logger.info("====================browse.xml已更新完毕===================="); }

  XML结构如下:

<?xml version="1.0" encoding="UTF-8"?>
<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" -->
<element flag="browse_code" pageSize="100" description="获取代码表">
<!-- sql语句必须保证正确 -->
<sql value="select * from code where `table` = ?">
<param>table</param>
<title>代码编号</title>
<title>代码内容</title>
<title>权重1</title>
<title>权重2</title>
<title>备注</title>
<output>id</output>
<output>content</output>
<output>weight1</output>
<output>weight2</output>
<output>note</output>
<output>column</output>
<output>table</output>
</sql>
</element>
<element flag="browse_teacherInformation" pageSize="10" description="对教师进行查询">
<!-- sql语句必须保证正确 -->
<sql value="select * from teacher_info where id like ? and name like ? and college=? " description="浏览教师">
<param>id</param>
<param>name</param>
<param drop="true1" session="true">college</param>
<title>职工号</title>
<title>教师姓名</title>
<title>性别</title>
<title>所属单位</title>
<title>来校日期</title>
<output>id</output>
<output>name</output>
<output>sex</output>
<output>college</output>
<output>arrive_time</output>
</sql>
</element> <element flag="browse_adminTeacherInformation" pageSize="10" description="对所有教师进行查询">
<!-- sql语句必须保证正确 -->
<sql value="select * from teacher_info where id like ? and name like ? and college like ? " description="浏览教师">
<param>id</param>
<param>name</param>
<param>college</param>
<title>序号</title>
<title>职工号</title>
<title>教师姓名</title>
<title>性别</title>
<title>所属单位</title>
<title>来校日期</title>
<output>id</output>
<output>name</output>
<output>sex</output>
<output>college</output>
<output>arrive_time</output>
</sql>
</element> <element flag="browse_teacherPassword" pageSize="10" description="对教师密码进行模糊查询">
<!-- sql语句必须保证正确 -->
<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="查询教师密码">
<param>id</param>
<param>name</param>
<param session="true" drop="true">userName</param>
<param session="true" drop="true">college</param>
<title>教师姓名</title>
<title>职工号</title>
<title>性别</title>
<title>密码</title>
<output>name</output>
<output>id</output>
<output>sex</output>
<output>password</output>
</sql>
</element>
<element flag="browse_administrator_teacherPassword" pageSize="10" description="对所有教师密码进行模糊查询">
<!-- sql语句必须保证正确 -->
<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="查询所有教师密码">
<param>college</param>
<param>id</param>
<param>name</param>
<param session="true" drop="true">userName</param>
<title>教师姓名</title>
<title>职工号</title>
<title>性别</title>
<title>密码</title>
<title>所属单位</title>
<output>name</output>
<output>id</output>
<output>sex</output>
<output>password</output>
<output>college</output>
</sql>
</element>
<element flag="browseNews" pageSize="10" description="对信息进行模糊查询">
<!-- sql语句必须保证正确 -->
<sql value="select * from news" description="信息查询">
<param></param>
<title>标题</title>
<title>发布时间</title>
<title>审核状态</title>
<output>title</output>
<output>publishTime</output>
<output>status</output>
<output>id</output>
</sql>
</element>
<element flag="getNews" pageSize="10" description="对信息进行模糊查询">
<!-- sql语句必须保证正确 -->
<sql value="select * from news where status = 1 limit 5" description="信息查询">
<output>id</output>
<output>title</output>
<output>publishTime</output>
</sql>
</element>
</BrowseElements>
  

  各类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. LeetCode 611. 有效三角形的个数(Valid Triangle Number)

    611. 有效三角形的个数 611. Valid Triangle Number 题目描述 LeetCode LeetCode LeetCode611. Valid Triangle Number中等 ...

  2. Word 中直引号和弯引号的相互替换

    直引号替换成弯引号 弯引号替换成直引号 未完 ...... 点击访问原文(进入后根据右侧标签,快速定位到本文)

  3. C++Primer 5th Chap2 Variables and basic Types

    wchar_t,char16_t,char32_t用于拓展字符集 char和signed char并不一样,由编译器决定类型char表现上述两种中的哪一种 一般long的大小和int无二,如果超过in ...

  4. python网课自动刷课程序-------selenium+chromedriver

    python的强大之处就在于有许多已经写好的功能库提供,这些库强大且易用,对于写一些有特定功能的小程序十分方便. 现在就用pyhton的selenium+谷歌游览器写一个可以自动刷课的程序,以智慧树上 ...

  5. kubernetes 实践一:基本概念和架构

    这里记录kubernetes学习和使用过程中的内容. CentOS7 k8s-1.13 flanneld-0.10 docker-18.06 etcd-3.3 kubernetes基本概念 kuber ...

  6. 使用 Angular RouteReuseStrategy 缓存(路由)组件

    使用 Angular RouteReuseStrategy 缓存组件 Cache components with Angular RouteReuseStrategy RouteReuseStrate ...

  7. jquery获取窗口和文档的高度和宽度

    整个可视区域的宽度和高度(会随着浏览器窗口大小改变而改变): $(window).width()和$(window).height() 整个文档的宽度和高度(不变): $(docoument).wid ...

  8. php操作表格(写)

    一,转载:http://www.thinkphp.cn/extend/832.html 二,转载:http://m.blog.csdn.net/article/details?id=7827038

  9. JS权威指南读书笔记(七)

    第十七章 事件处理 1 客户端JS程序采用了异步事件驱动编程模型. 2 关于事件的重要定义     a 事件类型(event type)     b 事件目标(event target) target ...

  10. windows下安装hexo和生成博客

    首先在电脑上安装node和git,这个只要在相关官网的下载然后一步安装即可. 然后在你的电脑上新建一个文件夹,用来存放你的博客文件,比如创建hexo 进入该文件,右键打开git bash 安装hexo ...