JXL制作属于自己的excel导入导出报表工具(二)xml和dtd

本文介绍如何使用DTD定义XML文件结构,实现报表配置。探讨了利用MyEclipse进行XML配置的方法,详细讲解了DTD元素与属性定义,及其实现报表工具的具体配置。

  接下来开始第二篇文章了,以前采用的那种类的静态成员变量做配置确实不是什么好办法,所以我也就不谈了,直接进入正题用xml来配置.目前我正在用MyEclipse,用过的人可能都知道,在我们写struts等配置文件时,我们可以用快捷键将所有的当前可用标签列出来,还可以将相应的属性列出来,十分方便,那么xml有哪些标签,有哪些属性,究竟如何定义呢?这就是我们要谈的dtd了.

<!DOCTYPE myreport SYSTEM "myreport.dtd">

   在xml文件中加入这么一句,那么我们所写的myreport.dtd就可以使用了.

 那么myreport.dtd是如何编写的呢?

 XML中的任何一个标签元素在dtd中都是如下这么定义的.

<!ELEMENT report (page?,allhead?,firsthead?,dynamic?,alltail?,lasttail?,count?)>

   report就是我们给这个标签的名称,而括号中的page 等是定义给report的子元素,当然这些也需要定义,和report的定义方式是一样的,后面的?代表该子标签出现0次或1次,此处还可以用+代表至少出现一次,*代表出现0次或多次,如果我们什么都不加,则代表只出现一次.

   除此之外,我们还可以为其指定属性,如下代码

  

<!ELEMENT report (page*,allhead?,firsthead?,dynamic?,alltail?,lasttail?,count?)>
<!ATTLIST report
	id CDATA #REQUIRED
	name CDATA #IMPLIED
	key CDATA #IMPLIED
	defaultFontName CDATA #IMPLIED
	defaultFontSize CDATA #IMPLIED
	defaultRowHeight CDATA #IMPLIED
	blockRows CDATA #IMPLIED
>

 用 ATTLIST可以指定一组属性,后面紧跟指明谁的属性,之后就是属性的定义了,首先是属性名,然后是类型

 #CDATA:指元素包含不通过解析器解析的字符数据。特殊字符和保留字不需要转义。常用这个
 #PCDATA:指元素包括解析器可解析字符数据。特殊字符和保留字需要转义才可以通过解析器。

 接着是,是否必须设定该属性IMPLIED为可选,REQUIRED则在XML中必须设定该属性.

 

 这样我们就可以定义好一个简单的属于我们自己的dtd了,以后mye也能按照我们写的给出提示了.

    

 但是还存在一各问题,就是我们有时可能需要指定xml中该属性的选择范围,如sex属性,我们仅允许选择男女.

 那么可以这样写

 

<!ATTLIST person 
  sex (男|女) "女"
>

    "女"代表默认值

 

 dtd的介绍就到这了,这些基本上足够满足我们的需求了.

 

   下面我们来想一下我们的报表工具都需要定义什么

 

   首先是根元素我们需要定义一个包含导入导出的根元素

 

 

<!ELEMENT myreport (report*,import*)>

 

 

 接下来如我前面举例,实现report,import,我们先只考虑report.

 

   作为一个报表,我们需要给其一个id,以便在一个xml中,我们可以定义多个报表的配置信息,并给其一个name,用于做为导出的excel名如:name为货品清单导出的则为货品清单.xls.其他的主键用于合并单元格,对于我在(一)中发的图来说就是物品名和型号.我们还可以为这个报表指定默认的字体,字体大小,以及行高.

 接下来就是定义动态数据和静态数据了,除了动态信息以外的六大部分都是静态数据,它们不需要循环.

 下面是具体的定义,注释写的很清楚就不做解释了.

 

<!--
代表一个动态数据
column x坐标
width  横跨单元格数
height 竖跨单元格数
rowHeight 行高
colWidth 列宽
field 对应bean的属性名
align 水平对齐
vAlign 垂直对齐
border 边框 left right top bottom all none 可用 可用|组合
type 类型 fixed固定 不调用bean 直接输出field的值 可用@index输出页码
		 format格式化输出 用?代表bean的field值  field可放入多个属性 以&分割
		 empty输出空字符
		 copy 拷贝field给定位置的内容 field 需要指定位置 格式如A-8
		 copywithformat 带格式拷贝 同copy 附带拷贝格式
		 formatcopy 先拷贝 然后将目标单元格中的?替换为bean的field值
		 prefix输出bean的field值之前 加上前缀 在prefix属性指定前缀
		 double输出bean的field小数值 保留2位
		 string 正常输出bean的field值
format 格式化内容 配合type为format 
prefix 前缀 配合type为prefix
fontName 字体名
fontSize 字体大小
fontColor 字体颜色
merge 是否合并 当report的key不为空时按key合并
bold 是否加粗
italic 是否斜体
underline 是否下划线
-->
<!ELEMENT dymdata (#PCDATA)>
<!ATTLIST dymdata
	column CDATA #REQUIRED
	width CDATA #IMPLIED
	height CDATA #IMPLIED
	rowHeight CDATA #IMPLIED
	colWidth  CDATA #IMPLIED
	field CDATA #IMPLIED
	align (left|right|centre) "centre"
	valign (top|bottom|centre) "centre"
	border CDATA #IMPLIED
	type (fixed|format|empty|copy|copywithformat|formatcopy|prefix|double|string) "string"
	format CDATA #IMPLIED
	prefix CDATA #IMPLIED
	fontName CDATA #IMPLIED
	fontSize CDATA #IMPLIED
	fontColor (black|white|red|bright_green|blue|yellow|light_orange|orange|brown|pink|dark_red|green|dark_blue|dark_yellow|grey_25_percent|grey_50_percent|ocean_blue|ice_blue|light_green|light_blue|gold|grey_40_percent|grey_80_percent) "black"
	merge (true|false) "false"
	bold (true|false) "false"
	italic (true|false) "false"
	underline (true|false) "false"
	notNull (true|false) "false"
>

 

 静态数据则只是多了relative来由我们控制输出的内容是相对位置还是绝对位置.

   建立好数据与page firsthead dynamic等之间的包含关系,dtd就完成了.

 写好dtd,我们就可以配置一个xml来用于今后报表工具测试.

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE myreport SYSTEM "myreport.dtd">
<myreport>
    <report id="test" name="test">
  <firsthead rows="4" columns="">
   <staticdata column="1" row="2" field="user" border="null" />
   <staticdata column="6" row="2" field="money" type="double" border="null"/>
   <staticdata column="1" row="3" field="date" border="null"/>
  </firsthead>
 </report>
</myreport>

 

 今天就写到这里了,下一次我们将实现xml的配置对象,以及如何将配置放入对象中去.

标题基于Python的自主学习系统后端设计与实现AI更换标题第1章引言介绍自主学习系统的研究背景、意义、现状以及本文的研究方法创新点。1.1研究背景与意义阐述自主学习系统在教育技术领域的重要性应用价值。1.2国内外研究现状分析国内外在自主学习系统后端技术方面的研究进展。1.3研究方法与创新点概述本文采用Python技术栈的设计方法系统创新点。第2章相关理论与技术总结自主学习系统后端开发的相关理论技术基础。2.1自主学习系统理论阐述自主学习系统的定义、特征理论基础。2.2Python后端技术栈介绍DjangoFlask等Python后端框架及其适用场景。2.3数据库技术讨论关系型非关系型数据库在系统中的应用方案。第3章系统设计与实现详细介绍自主学习系统后端的设计方案实现过程。3.1系统架构设计提出基于微服务的系统架构设计方案。3.2核心模块设计详细说明用户管理、学习资源管理、进度跟踪等核心模块设计。3.3关键技术实现阐述个性化推荐算法、学习行为分析等关键技术的实现。第4章系统测试与评估对系统进行功能测试性能评估。4.1测试环境与方法介绍测试环境配置采用的测试方法。4.2功能测试结果展示各功能模块的测试结果问题修复情况。4.3性能评估分析分析系统在高并发等场景下的性能表现。第5章结论与展望总结研究成果并提出未来改进方向。5.1研究结论概括系统设计的主要成果技术创新。5.2未来展望指出系统局限性并提出后续优化方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值