同事Q:“小黑,你上次说一半不说一半,这次可得老实交待怎么从XML查询数据了吧。”
俺:“好好,我这就交待。你看我这星期不是忙得焦头烂额么?”(注:忙永远是程序员的借口)
其实JasperReport使用的也不是什么神秘的东西,就是XPATH。
XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历(从w3cshool抄来的)。
关于XPATH,我就不详细讲了,因为对于普通的报表,只需要掌握几个常用的查询;如果想深究网上有更好的教程(教程可以点这里
)。我这里只简单地讲解XPATH的一些概念和常用的一些查询。
(1)什么是绝对路径和相对路径?
我这里那是拿出我的NameList做例子吧。
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><?
xml version="1.0" encoding="utf-8"
?>
<
NameList
>
<
Person
>
<
Name
>
强尼
</
Name
>
<
Gender
>
男
</
Gender
>
<
Age
>
56
</
Age
>
</
Person
>
<
Person
>
<
Name
>
阿美
</
Name
>
<
Gender
>
女
</
Gender
>
<
Age
>
23
</
Age
>
</
Person
>
<
Person
>
<
Name
>
李丽
</
Name
>
<
Gender
>
女
</
Gender
>
<
Age
>
58
</
Age
>
</
Person
>
</
NameList
>
例如我要选取所有的Person节点,那绝对路径
应该这样写:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->/NameList/Person
现在以Person作为根路径
,如果要选取所有Person节点下的Name节点,那相对路径
可以这样写:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->Name
所谓的相对路径是不以/开头,相对与一个绝对路径的路径。如果用绝对路径选取所有Name节点,可以这样写:
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->/NameList/Person/Name
(2)带条件的XPATH查询
XPATH的条件是写在路径后的一个方括号内,条件支持XPATH的函数和一些逻辑运算符号。常用的逻辑运算符号
有+,<,=,or,and等。以下是一些例子。
选取第一个Person节点
/NameList/Person[1]或
/NameList/Person[position()=1]
选取Age小于50的Person节点
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->/NameList/Person[./Age<50]
选取Gender是女的Person节点
<!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->/NameList/Person[./Gender='女']
(3)XPATH的函数
count()函数主要是计算节点数量,可以带一个参数,例如
查询Person的节点数量,结果返回3
count(/NameList/Person)
position() 函数主要是用于条件查询,返回节点的定位,例如
选取前两个Person节点
/NameList/Person[position()<=2]
简单介绍完XPATH,下面我们来看XPATH怎么在JasperReport里运用。我在JasperReport那些事儿(一)
里曾经介绍过XPATH的使用,但是没有做详细介绍。现在我们再来看其中的一个步骤。
看第十步,其实这里就是配置了一个根路径/NameList/Person,下面几个field的Descirption其实也是XPATH表达式,配置了相对路径。通过XPATH表达式,field会获取到匹配节点的值,这就是XML数据填充的过程。
10) 打开NameList_subreport0模板,先配置XPATH,然后右击节点Name,选Add node as field.同样将Gender和Age节点加入field。点OK。然后你可以看到左边的结构视窗多了三个Field。
分享到:
相关推荐
jasperreport中文资料——梧桦椰枫(收集).zip
jasperReport5.6.1编码以及使用的文档,另外大家还可以看的博客,有与springMVC的整合
ireport 也是开源组织sf.net 中的一款免费软件,其主要作用是用来以可视化的方式设计 生成jasperreport 所使用的报表格式文件,因为jasperreport 本身并未提供很好的可视化报 表设计工具,ireport 的出现...
asperReport的应用,发现大部分都是讲如何将jasper导入一个html或pdf进行打印的例子,并没有直接将jasperReport打印生成一个图像的示例。包括jaspe自带的demo里面,所以有高手就写了如何生成图片的方法
介绍jasperreport的使用及在spring中的设置、及导出html、excel、pdf等技术
JasperReport与Ireport的配置与使用.pdf
这是一个用jasperreport 生成pdf,html,xml,csv,xls报表,myeclipse源码。
JasperReport 与iReport 的配置与使用
jasperreport、applet 客户端打印 注意:使用程序请导入jasperReport3.0和iReport3.0的包。
Jasperreport中文使用手册
jasperreport与ireport的配置与使用教程 PDF,对java开发不是太懂,需要的朋友下载吧。
JasperReport 与 iReport 的配置与使用.pdf;作者:裴贺先 内容概况: 第一章:JasperReport 与 iReport 简介 第二章:安装与配置 第三章:iReport 的使用 第四章:JasperReport 在程序中的应用 第五章:参考信息及...
JasperReport初级教程(2.0.3)调用Java代码_图文详解_绝对原创
JasperReport实例导入可用
jasperReport 动态合并单元格示例
JasperReport报表设计总结 JasperReport报表设计总结
使用JasperReport+iReport进行WEB开发,是这篇文章http://blog.csdn.net/tch918/article/details/12200607的源码
jasperreport教程jasperreport教程