基于XML数据源的Jasper Report如何指定获取特定行数据
解决方案
核心问题是XPath表达式写法错误,正确用法如下:
- 按节点位置取值(XPath索引从1开始)
要取第N个date节点的iso属性,写法为:week-dates/date[N]/@iso
比如你要取第三个date节点(对应dayNumber=3)的iso值,直接写week-dates/date[3]/@iso即可。你之前的写法错误原因有两个:一是漏写了属性前缀@,二是把索引加在了iso属性上而非date节点上,导致匹配不到目标节点。如果遇到复杂上下文表达式不生效,可以给节点集加括号控制优先级:(week-dates/date)[3]/@iso。 - 按属性匹配取值(更稳妥,不受节点排序变动影响)
如果要精确匹配dayNumber为指定值的节点,写法为:week-dates/date[@dayNumber='目标值']/@iso
比如要取dayNumber=3的iso值,写week-dates/date[@dayNumber='3']/@iso即可,哪怕后续date节点顺序调整,也不会取错值。
补充说明
如果表达式还是不生效,可以在路径开头加/指定为绝对路径,避免当前上下文影响,比如/week-dates/date[3]/@iso。如果要横向排列7天的日期,直接在page header band中放置7个文本字段,分别对应1到7的索引表达式即可,不需要依赖detail band的遍历逻辑。
内容的提问来源于stack exchange,提问作者Paul Fox-Reeks
相关产品推荐
相关产品推荐

