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. **晒图原理**:晒图的基本原理基于光化学反应。通过将含有感光材料的纸张(通常为蓝...
平版印刷的过程不是直接将油墨转移到承印物上,而是先通过橡皮布的传递。油墨先被转移到橡皮滚筒上,然后再由橡皮滚筒转印到承印物上。这种方式避免了油墨直接接触版面,防止了图文部分的磨损。 四、平版制版: ...
平版印刷工技能考试(真题) 本资源摘要信息是关于平版印刷工技能考试的真题,涵盖了纸张、油墨质量检测、印刷质量鉴别、上机解答和上机操作等方面的知识点。 一、纸张鉴别 * 纸张鉴别的方法:在提供的含10种纸张...
间接印刷是平版印刷的特色,印版上的图文油墨不是直接转移到承印物上,而是先转移到橡皮滚筒,再由橡皮滚筒转印到纸张等材料上。橡皮布的弹性确保了图像的完整转移,同时保持了清晰的层次和网点质量。 平版制版主要...
《JBT 9117-2013 金属板平版印刷机》是中国机械工业联合会发布的一项标准,主要用于规范金属板平版印刷机的设计、制造、检验和验收过程。这项标准对于确保印刷机的性能、质量和安全性具有重要意义。在深入理解这个...
在电子行业中,平版胶印机是印刷领域中不可或缺的重要设备,主要用于大规模、高质量的印刷生产。平版胶印机的印刷压力电子...随着科技的发展,这类设备的功能将进一步完善,为电子行业的印刷领域带来更大的便利和进步。
关于保护性平版印刷版,它是在印刷版制作完成后,为了确保长时间使用中印刷版的质量与耐用性,而采取的一系列保护措施。这些措施可能包括在印刷版表面涂覆一层或多层防护膜,以防御化学腐蚀、机械磨损、以及日常操作...
在现代印刷行业中,平版印刷,又称胶印,因其高效率、高质量的印刷效果而成为主要的印刷技术。它能够实现多色印刷,尤其在复杂的图像和文字印刷中显示出其独特的优势。了解和掌握平版印刷工艺流程是印刷操作人员必须...
2. 观察印刷品使用的光源色温:印刷品色彩的准确性取决于观察条件,标准光源通常是6500K左右的色温,接近日光,用于色彩校正和匹配。 3. 平版印刷精细印刷品的相对反差值:反差值反映了图像层次的丰富程度,黄色的...
在当今快速发展的印刷技术行业中,平版印刷机的自动化控制调试与维护显得尤为重要。本篇文献由吴贤锋撰写,详细介绍了平版印刷机的自动化控制系统,以及在调试和维护过程中常见问题的处理方法。以下将详细解读文档中...
"平版印刷的工艺设计知识" 本文档主要讲解了平版印刷的工艺设计知识,涵盖了印刷的定义、发展、要素、分类等基本概念,同时也涉及了纸的组成、制造、纹理、规格、定量等方面的知识,以下是详细的知识点总结: 一、...
平版印刷机自动化控制调试与...平版印刷机自动化控制调试与维护不仅要求技术人员具备扎实的理论基础,还需要实践经验的积累。通过深入理解和实践这些知识点,可以提高印刷效率,减少停机时间,从而提升整体生产效益。