现在的位置: 首页 > 综合 > 正文

利用jdom读取xml文件

2013年12月01日 ⁄ 综合 ⁄ 共 9048字 ⁄ 字号 评论关闭

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)%>&nbsp;</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)%>&nbsp;</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)%>&nbsp;</td>
 </tr>
<%}
n++;
}%>
 </table>

  我喜欢的

浏览器

  我喜欢的

文化礼品

  我喜欢的

ISP网站

  我喜欢的

网站

FireFox 2.0

100部奥斯卡影片

时代互联

博告网

   

   

  时代互联10元换空间

  加入博告网日进斗金不是梦!

聚合到我的好诶网博告网 提供的广告

抱歉!评论已关闭.