JasperReport那些事儿(三)——利用XPATH查询XML
副标题#e#
同事Q:“小黑,你上次说一半不说一半,这次可得诚恳交待怎么从XML查询数据了吧。”
俺:“好好,我这就交待。你看我这礼拜不是忙得焦头烂额么?”(注:忙永远是措施员的捏词)
其实JasperReport利用的也不是什么神秘的对象,就是XPATH。
XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性举办遍历(从w3cshool抄来的)。关于XPATH,我就不具体讲了,因为对付普通的报表,只需要把握几个常用的查询;假如想深究网上有更好的教程(教程可以点这里)。我这里只简朴地讲授XPATH的一些观念和常用的一些查询。
(1)什么是绝对路径和相对路径?
我这里那是拿出我的NameList做例子吧。
<?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节点,那绝对路径应该这样写:
/NameList/Person
此刻以Person作为根路径,假如要选取所有Person节点下的Name节点,那相对路径可以这样写:
Name
所谓的相对路径是不以/开头,相对与一个绝对路径的路径。假如用绝对路径选取所有Name节点,可以这样写:
/NameList/Person/Name
(2)带条件的XPATH查询
XPATH的条件是写在路径后的一个方括号内,条件支持XPATH的函数和一些逻辑运算标记。常用的逻辑运算标记有+,<,=,or,and等。以下是一些例子。
选取第一个Person节点
/NameList/Person[1]或/NameList/Person[position()=1]
选取Age小于50的Person节点
/NameList/Person[./Age<50]
选取Gender是女的Person节点
/NameList/Person[./Gender='女']
#p#副标题#e#
(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。
措施员的一生其实可短暂了,这电脑一开一关,一天已往了,嚎;电脑一开不关,那就成处事器了,嚎……