package xmlgrid;
import org.jdom.*;
import org.jdom.output.*;
import org.jdom.input.*;
import org.jdom.xpath.*;
import java.io.*;
import java.util.*;
import log.log4j29;
import org.apache.log4j.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
public class ReadXml
{
static Logger debugLog = Logger.getLogger("debug");
static Logger infoLog = Logger.getLogger("info");
static Logger errorLog = Logger.getLogger("error");
private HashMap hsmap_IndexColumn = new HashMap(); //列序-列名对HashMap
private HashMap hsmap_ColumnIndex = new HashMap(); //列名-列序对HashMap
private Element em_root; //xml文档根元素element
private int curRowSequence; //当前行序号
private int rowCount; //总行数
private int columnCount; //列数
private ArrayList arr_CacheData; //缓冲数据
private int cacheRowCount; //缓冲行数
private int curCacheRow; //缓冲当前行的下标
private int curCacheRowOfD; //缓冲当前行所在记录集的下标
/**
*
* @param document
*/
public ReadXml(Document document)
{
PropertyConfigurator.configure("log4j.properties");
try
{
SAXBuilder sb = new SAXBuilder(); // 新建立构造器
Document doc = document; // 读入文件
// doc.toString();
// doc.
em_root = doc.getRootElement(); // 获得根元素element
//找到第一行
List list_find = XPath.selectNodes(em_root,
"/Grid/ROW[@RowSequence='1']");
// doc.get
//获取当前行
Element em_find = (Element) list_find.get(0);
//获取当前行的属性
List list_findchild = em_find.getAttributes();
for (int i = 0; i < list_findchild.size(); i++)
{
//获取第i列属性
Attribute att_column = (Attribute) list_findchild.get(i);
//将列的次序和列名放入hsmap_IndexColumn中
hsmap_IndexColumn.put("" + i, att_column.getName());
//将列名和列的次序放入hsmap_ColumnIndex中
hsmap_ColumnIndex.put(att_column.getName(), "" + i);
}
//设置总列数
columnCount = list_findchild.size();
//初始化当前行为第1行
}
catch (Exception e)
{
errorLog.error(e.toString());
}
}
//设置缓冲行数
public void setCacheRowCount(int CacheCount)
{
this.cacheRowCount = CacheCount;
}
public int getRowCount()
{
try
{
//获取总行数
List list_find = XPath.selectNodes(em_root, "/Grid/ROW");
debugLog.debug("find1.size():" + list_find.size());
this.rowCount = list_find.size();
return list_find.size();
}
catch (JDOMException e)
{
errorLog.error(e.toString());
return 0;
}
}
/**
*
* @return 列数
*/
public int getColumnCount()
{
return columnCount;
}
/**
*
* @param column_index
* @return //返回当前行第i列的值
*/
public String getString(int column_index)
{
String curRowData[] = (String[])this.arr_CacheData.get(this.curCacheRow);
return curRowData[column_index];
}
public void absolute(int RowIndex)
{
//如果指定行大于总行数或小于0,则让其行下标为指向最后一行
this.getRowCount();
if (RowIndex > rowCount || RowIndex < 0)
{
RowIndex = rowCount;
}
//如果没有指定缓冲行,则设置默认值
if (this.cacheRowCount == 0)
{
this.cacheRowCount = 10;
}
//设置为当前行
this.curRowSequence = RowIndex;
//缓冲开始行
int beginRow = calculateArea(RowIndex);
// System.out.println("开始行:" + beginRow);
//当前行所在缓冲区域的开始行
int curCacheBeginRow;
//缓冲当前行所在记录集的下标不为0时,计算其缓冲区开始位置
if (this.curCacheRowOfD != 0)
{
curCacheBeginRow = calculateArea(this.curCacheRowOfD);
}
//缓冲当前行所在记录集的下标为0时,缓冲区开始位置设为0
else
{
curCacheBeginRow = 0;
}
// System.out.println("当前行所在缓冲区域的开始行:" + curCacheBeginRow);
//缓冲结束行
int endRow = beginRow * this.cacheRowCount;
//System.out.println("结束行:" + endRow);
//准备缓冲开始行不等于当前缓冲开始行,则需要缓冲
if (beginRow != this.curCacheRowOfD)
{
//给当前缓冲开始行重新赋为正在缓冲的开始行
this.curCacheRowOfD = beginRow;
//缓冲数组列表
this.arr_CacheData = new ArrayList(this.cacheRowCount);
try
{
//查询
List list_find = XPath.selectNodes(em_root,
"/Grid/ROW[@RowSequence>='" +
beginRow +
"' and @RowSequence<='" + endRow +
"']");
// System.out.println("行数:" + list_find.size());
//填充数据到this.arr_CacheData中
for (int i = 0; i < list_find.size(); i++)
{
Element em_find = (Element) list_find.get(i);
//获取当前行的属性
List list_findAttributes = em_find.getAttributes();
String attributes[] = new String[list_findAttributes.size()];
for (int j = 0; j < list_findAttributes.size(); j++)
{
Attribute att_column = (Attribute) list_findAttributes.get(j);
attributes[j] = att_column.getValue();
// System.out.print(attributes[j]+" ");
}
// System.out.println();
this.arr_CacheData.add(attributes);
}
this.curCacheRow = (RowIndex - 1) % this.cacheRowCount;
//System.out.println("缓冲行1:" + curCacheRow);
}
catch (JDOMException e)
{
errorLog.error(e.toString());
}
}
//当前缓冲行与将缓冲行在相同的区域,则不需要重新缓冲
else if (beginRow == this.curCacheRowOfD)
{
this.curCacheRow = (RowIndex - 1) % this.cacheRowCount;
if (this.curCacheRow < 0)
{
this.curCacheRow = 0;
}
// System.out.println("当前缓冲行2:" + curCacheRow);
return;
}
}
public int getCurRowIndex()
{
return curRowSequence;
}
public boolean nextRecord()
{
if (curRowSequence + 1 > getRowCount())
{
return false;
}
else
{
++curRowSequence;
this.absolute(curRowSequence);
return true;
}
}
public String getString(String columnName)
{
return getString(getColunmIndex(columnName));
}
public String getColunmName(int ColunmIndex)
{
return (String) hsmap_IndexColumn.get("" + ColunmIndex);
}
public int getColunmIndex(String ColunmName)
{
Object cn = (Object) ColunmName;
return Integer.parseInt( (String) hsmap_ColumnIndex.get(ColunmName));
}
public static void main(String[] args)
{
WriteXml writeXml = new WriteXml(" (select UserID,'用户' as type,UserName,UserEmail1,UserStatus,OUID from TM_OUInfo,TM_GroupUserAndOU,TM_UserInfo where RelationType=3 and OUID=ObjectID and RelaObjectID=UserID "
+ " Union all select GroupID,'组' as type, GroupName,GroupEmail,'-1' as UserStatus,OUID from TM_OUInfo,TM_GroupUserAndOU,TM_GroupInfo "
+
" where RelationType=4 and OUID=ObjectID and RelaObjectID=GroupID)");
;
ReadXml readXml = new ReadXml(writeXml.writeXmlFile("company.xml"));
/*debugLog.debug("" + readXml.getRowCount());
readXml.getString(1);
debugLog.debug(readXml.getColunmIndex("UserLoginName") + "");
readXml.getString("UserLoginName");*/
int curIndex = readXml.getCurRowIndex();
while (readXml.nextRecord())
{
{
System.out.println(readXml.getString("RowSequence"));
}
}
}
public int calculateArea(int index)
{
int beginArea;
if (index % this.cacheRowCount != 0)
{
beginArea = (index / this.cacheRowCount) * this.cacheRowCount + 1;
}
else
{
beginArea = (index / this.cacheRowCount - 1) * this.cacheRowCount + 1;
}
return beginArea;
}
}
分享到:
相关推荐
因此,需要不断改进和完善平版印刷的技术和工艺。 10. 平版印刷的发展趋势:平版印刷的发展趋势是朝着高速、智能、数字化和环保的方向发展。随着技术的不断改进和发展,平版印刷将继续保持其在印刷行业中的重要地位...
平版胶印印刷工艺流程是印刷行业中广泛应用的技术,主要用于高质量的商业印刷和出版物制作。以下将详细解析这一工艺流程中的各个关键环节。 首先,**印刷准备**是整个流程的基础,涉及纸张、印版、油墨、润版液以及...
全国印刷行业职业技能大赛理论知识题库 平版制版工:目录、1-6章理论知识考题库及答案 2016 年 1 月第 1 版 2016 年 1 月第 1 次印届
【标题】"韩顺平版小型学生管理系统"是一款基于Java编程语言开发的教育管理软件,旨在帮助初学者理解和掌握数据库操作以及基本的增删改查功能。这个管理系统是按照韩顺平老师的Java教学系列视频逐步指导完成的,具有...
【蒋立平版数字电路课件】是一套全面讲解数字电子技术的教育资源,由知名教育专家蒋立平教授精心编撰。这套课件是学习数字电路理论与实践的理想材料,适用于大学电子信息工程、自动化、计算机科学等相关专业学生,...
平版印刷,又称胶印,是一种广泛应用于现代印刷行业的技术,其主要原理基于“油水相斥”的概念。平版印刷的印版图文部分和非图文部分在同一平面上,但特性不同:图文部分亲油疏水,空白部分则具有极强的亲水性。在...
平版制版工操作技能竞赛是一项旨在检验参赛者在图像处理、图形制作、排版等方面专业技能的比赛。评分总表详细列出了各项竞赛内容、评分标准以及对应的分值,确保了比赛的公正性和客观性。 首先,图像输入输出及处理...
在本压缩包文件中,包含了一份详细的技术文档——“晒图机平版纸晒图装置.pdf”。 该文档可能涵盖了以下几个关键知识点: 1. **晒图原理**:晒图的基本原理基于光化学反应。通过将含有感光材料的纸张(通常为蓝...
本文件“行业文档-设计装置-一种平版印刷纸张吊夹装置.zip”包含了一份详细的设计文档,即“一种平版印刷纸张吊夹装置.pdf”,该文档深入探讨了这种特殊装置的设计理念、工作原理及其在实际应用中的优势。...
平版印刷的过程不是直接将油墨转移到承印物上,而是先通过橡皮布的传递。油墨先被转移到橡皮滚筒上,然后再由橡皮滚筒转印到承印物上。这种方式避免了油墨直接接触版面,防止了图文部分的磨损。 四、平版制版: ...
标题中的“行业分类-设备装置-用于平版印刷版的薄衬纸及其生产方法和保护性平版印刷版及其层压板”表明了这个技术领域是关于印刷工业,特别是平版印刷中的关键材料——薄衬纸,以及其生产和相关保护性印刷版的制作...
平版印刷工技能考试(真题) 本资源摘要信息是关于平版印刷工技能考试的真题,涵盖了纸张、油墨质量检测、印刷质量鉴别、上机解答和上机操作等方面的知识点。 一、纸张鉴别 * 纸张鉴别的方法:在提供的含10种纸张...
间接印刷是平版印刷的特色,印版上的图文油墨不是直接转移到承印物上,而是先转移到橡皮滚筒,再由橡皮滚筒转印到纸张等材料上。橡皮布的弹性确保了图像的完整转移,同时保持了清晰的层次和网点质量。 平版制版主要...
《JBT 9117-2013 金属板平版印刷机》是中国机械工业联合会发布的一项标准,主要用于规范金属板平版印刷机的设计、制造、检验和验收过程。这项标准对于确保印刷机的性能、质量和安全性具有重要意义。在深入理解这个...
在电子行业中,平版胶印机是印刷领域中不可或缺的重要设备,主要用于大规模、高质量的印刷生产。平版胶印机的印刷压力电子...随着科技的发展,这类设备的功能将进一步完善,为电子行业的印刷领域带来更大的便利和进步。
2. 观察印刷品使用的光源色温:印刷品色彩的准确性取决于观察条件,标准光源通常是6500K左右的色温,接近日光,用于色彩校正和匹配。 3. 平版印刷精细印刷品的相对反差值:反差值反映了图像层次的丰富程度,黄色的...
在当今快速发展的印刷技术行业中,平版印刷机的自动化控制调试与维护显得尤为重要。本篇文献由吴贤锋撰写,详细介绍了平版印刷机的自动化控制系统,以及在调试和维护过程中常见问题的处理方法。以下将详细解读文档中...
"平版印刷的工艺设计知识" 本文档主要讲解了平版印刷的工艺设计知识,涵盖了印刷的定义、发展、要素、分类等基本概念,同时也涉及了纸的组成、制造、纹理、规格、定量等方面的知识,以下是详细的知识点总结: 一、...
平版印刷机自动化控制调试与...平版印刷机自动化控制调试与维护不仅要求技术人员具备扎实的理论基础,还需要实践经验的积累。通过深入理解和实践这些知识点,可以提高印刷效率,减少停机时间,从而提升整体生产效益。