import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
/*******************************************************************************
* 利用jdom读取xml文件
* @version 1.0
* @date 2007-11-7
* @author zhaosoft
*
******************************************************************************/
public class Masking extends Path {
private SAXBuilder builder = null;
private Document doc = null;
private Element root = null;
// 构造函数
public Masking(String fileName) {
init(fileName);
}
// 无产构造函数
public Masking() {
}
// 设置文件名
public void setFile(String fileName) {
init(fileName);
}
private void init(String fileName) {
// 调用父类的getPath方法,得到classes文件的根路径,然后加上conf,得到文件的全路径
String file = getPath() + "/conf/" + fileName;
try {
builder = new SAXBuilder("org.apache.xerces.parsers.SAXParser");// 读取解析XML文件的驱动
doc = builder.build(new File(file));
// 得到xml文件的根节点
root = doc.getRootElement();
} catch (Exception je) {
je.printStackTrace();
}
}
public Document getDocument() {
return doc;
}
/**
*
* 获得配置文件所有的数据表名(中文)
* **/
public Vector getTableNicks() {
Vector result = new Vector();
Iterator tables = getTables().iterator();// 实现遍历的迭代器
while (tables.hasNext()) {
result.addElement(getTableNick((Element) tables.next()));
}
return result;
}
/**
* 获得配置文件所有的数据表名(英文)
*/
public Vector getTableNames() {
Vector result = new Vector();
Iterator tables = getTables().iterator();
while (tables.hasNext()) {
result.addElement(getTableName((Element) tables.next()));
}
return result;
}
/**
* 获得配置文件所有的数据表名(英文名和中文名)
*/
public HashMap getTableNameAndNicks() {
HashMap result = new HashMap();// 将得到的数据表中英文名称成对放入哈希表
Iterator tables = getTables().iterator();
while (tables.hasNext()) {
Element table = (Element) tables.next();
result.put(getTableName(table), getTableNick(table));
}
return result;
}
/**
* 获得某个数据表所有字段名(英文名和中文名)
*/
public HashMap getColumnNameAndNicks(String tablenick) {
if (getTable(tablenick) != null) {
HashMap result = new HashMap();
Iterator loop = getColumns(getTable(tablenick)).iterator();
while (loop.hasNext()) {
Element col = (Element) loop.next();
result.put(getName(col), getNick(col));
}
return result;
}
return null;
}
/**
* 获得某个数据表所有字段名(英文名)
*/
public Vector getColumnNames(String tablenick) {
if (getTable(tablenick) != null) {
Vector result = new Vector();
Iterator loop = getColumns(getTable(tablenick)).iterator();
while (loop.hasNext()) {
Element col = (Element) loop.next();
result.addElement(getName(col));
}
return result;
}
return null;
}
/**
* 获得某个数据表所有字段名(中文名)
*/
public Vector getColumnNicks(String tablenick) {
if (getTable(tablenick) != null) {
Vector result = new Vector();
Iterator loop = getColumns(getTable(tablenick)).iterator();
while (loop.hasNext()) {
Element col = (Element) loop.next();
result.addElement(getNick(col));
}
return result;
}
return null;
}
/**
* 返回字段的英文名称
*
* @param tablenick
* 中文数据表名
* @param columnnick
* 中文字段名
*/
public String getColumnName(String tablenick, String columnnick) {
Element table = getTable(tablenick);
Iterator loop = getColumns(table).iterator();
while (loop.hasNext()) {
Element col = (Element) loop.next();
if (getNick(col).equals(columnnick)) {
return getName(col);
}
}
return null;
}
/**
* 将某个数据表的中文名称转化为英文名称
*/
public String getTableNameFromNick(String tablenick) {
return getTableName(getTable(tablenick));
}
/**
* 将某个数据表的英文名称转化为中文名称
*/
public String getTableNickFromName(String table) {
HashMap map = getTableNameAndNicks();// map的键为Name,值为Nick
if (map == null) {
return null;
}
return (String) map.get(table);
}
/**
* 在配置文件中定位某个名称为中文的数据表区域,准备做某些操作
*/
public Element getTable(String tablenick) {
Iterator loop = getTables().iterator();
while (loop.hasNext()) {
Element table = (Element) loop.next();
if (getTableNick(table).equals(tablenick))
return table;
}
return null;
}
/**
* 在配置文件中得到所有的数据表区域放到list结果集 ,准备做某些操作
*/
private List getTables() {
List list = root.getChild("tables").getChildren("table");
return list;
}
/**
* 在配置文件中得到某个数据表的中文名称 ,准备做某些操作
*/
private String getTableNick(Element table) {
return table.getAttributeValue("nick");
}
/**
* 在配置文件中得到某个数据表的英文名称 ,准备做某些操作
*/
private String getTableName(Element table) {
return table.getAttributeValue("name");
}
/**
* 在配置文件中得到某个数据表的所有字段对象,放到list结果集 ,准备做某些操作
*/
private List getColumns(Element table) {
List list = table.getChild("columns").getChildren("column");
return list;
}
/**
* 在配置文件中得到某个数据表的所有字段的数量,准备做某些操作
*/
private int getColumnsSize(Element table) {
return getColumns(table).size();
}
/**
* 在配置文件中得到某个数据表的某个字段的中文名称,准备做某些操作
*/
private String getNick(Element column) {
return column.getAttributeValue("nick");
}
/**
* 在配置文件中得到某个数据表的某个字段的英文名称,准备做某些操作
*/
private String getName(Element column) {
return column.getAttributeValue("name");
}
/**
* @param args
*/
public static void main(String[] args) {
System.out.println();
}
}
Path.java类的代码
package com.zhaosoft.xml;
import java.net.URL;
/*******************************************************************************
* 为了java 虚拟机运行目录无关性而设置的类。
*@version 1.0
*@date 2007-11-7
*@author zhaosoft
*
******************************************************************************/
public class Path {
private String strURL1;
public Path() {
}
public String getPath() {
//得到类名
String strClassName = getClass().getName();
//包名
String strPackageName = "";
if (getClass().getPackage() != null) {
strPackageName = getClass().getPackage().getName();
}
//得到类文件名
String strClassFileName = "";
if (!"".equals(strPackageName)) { //如果包名不能为空
strClassFileName = strClassName.substring(strPackageName.length() + 1, strClassName.length());
} else {
strClassFileName = strClassName;
}
//类文件的存放的路径
URL url = getClass().getResource(strClassFileName + ".class");
String strURL = url.toString();
System.out.println(strURL);
//得到第一个/和最后一个/之间的字符串
strURL = strURL.substring(strURL.indexOf('/') + 1, strURL.lastIndexOf('/'));
System.out.println(strURL);
//得到WEB-INF之前的字符串
String strURL2 = strURL.substring(0, strURL.lastIndexOf("WEB-INF"));
System.out.println(strURL2);
//在路径后添加classes/
strURL1 = strURL2 + "WEB-INF/classes/";
//user.dir是指java虚拟机路径,file.separator是文件分割符。假设使用的是resin,user.dir即为RESIN_HOME。在本excel导出应用中是为了得到xml文件的路径。
String path = strURL1;
return path;
}
/**
* @param args
*/
public static void main(String[] args) {
new Path().getPath();
}
}
data.xml文件
<?xml version="1.0" encoding="GB2312"?>
<config>
<tables>
<table nick="企业文化" name="oa_culture">
<columns>
<column nick="标题" name="subject" hibernate="subject"/>
<column nick="分类" name="type" hibernate="type"/>
<column nick="I级机构编号" name="FIRST_KIND_ID" hibernate="firstKindId"/>
<column nick="I级机构名称" name="FIRST_KIND_NAME" hibernate="firstKindName"/>
<column nick="II级机构编号" name="SECOND_KIND_ID" hibernate="secondKindId"/>
<column nick="II级机构名称" name="SECOND_KIND_NAME" hibernate="secondKindName"/>
<column nick="III级机构编号" name="THIRD_KIND_ID" hibernate="thirdKindId"/>
<column nick="III级机构名称" name="THIRD_KIND_NAME" hibernate="thirdKindName"/>
<column nick="内容" name="content" hibernate="content"/>
<column nick="附件1" name="attachment1" hibernate="attachment1"/>
<column nick="附件2" name="attachment2" hibernate="attachment2"/>
<column nick="备注" name="remark" hibernate="remark"/>
<column nick="登记人" name="REGISTER" hibernate="register"/>
<column nick="登记人编号" name="REGISTER_ID" hibernate="registerId"/>
<column nick="审核人" name="CHECKER" hibernate="checker"/>
<column nick="审核人编号" name="CHECKER_ID" hibernate="checkerId"/>
<column nick="变更人" name="CHANGER" hibernate="changer"/>
<column nick="变更人编号" name="CHANGER_ID" hibernate="changerId"/>
<column nick="档案变更累计" name="CHANGE_AMOUNT" hibernate="changeAmount"/>
</columns>
</table>
</tables>
</config>
测试用的jsp页面test.jsp
<%@page contentType="text/html; charset=gb2312" language="java" import="java.sql.*"
import="java.util.*" import="java.io.*" import="java.text.*" import="java.util.Vector"%>
<jsp:useBean id="mask" class="com.zhaosoft.xml.Masking"/>
<jsp:setProperty name="mask" property="file" value="com/zhaosoft/xml/data.xml"/>
<table width="100%">
<%
Vector columns=mask.getColumnNicks("企业文化");
System.out.println(columns.size());
Vector columns1=mask.getColumnNames("企业文化");
System.out.println(columns1.size());
int n=0;
while(n<columns.size()) {
%>
<tr class="TR_STYLE1">
<td class="TD_STYLE2" width="25%">
<input type="checkbox" class="CHECKBOX_STYLE1"
name="col" value="<%=(String)columns1.elementAt(n)%>/<%=(String)columns.elementAt(n)%>"><%=columns.elementAt(n)%> </td>
<%n++;
if(n<columns.size()){
%>
<td class="TD_STYLE2" width="25%">
<input type="checkbox" name="col" value="<%=(String)columns1.elementAt(n)%>/<%=(String)columns.elementAt(n)%>"><%=columns.elementAt(n)%></td>
<%}
n++;
if(n<columns.size()){
%>
<td class="TD_STYLE2" width="25%">
<input type="checkbox" name="col" value="<%=(String)columns1.elementAt(n)%>/<%=columns.elementAt(n)%>">
<%=columns.elementAt(n)%> </td>
<%}
n++;
if(n<columns.size()){
%>
<td class="TD_STYLE2" width="25%">
<input type="checkbox" name="col" value="<%=(String)columns1.elementAt(n)%>/<%=(String)columns.elementAt(n)%>">
<%=columns.elementAt(n)%> </td>
</tr>
<%}
n++;
}%>
</table>
我喜欢的
浏览器 |
我喜欢的
文化礼品 |
我喜欢的
ISP网站 |
我喜欢的
网站 |
FireFox 2.0
|
100部奥斯卡影片
|
时代互联
|
博告网
|
|
|
时代互联10元换空间
|
加入博告网日进斗金不是梦!
|
聚合到我的好诶网博告网 提供的广告 |