JasperReports:如何让jrxml字段根据XML数据源路径动态取值?
适配多路径的XML字段取值方案
重构后的字段代码(XPath 1.0兼容版)
<field name="myField" class="java.lang.String"> <property name="net.sf.jasperreports.xpath.field.expression" value="string(./car/owner/name | ./car/ownerName)"/> </field>
逻辑说明
- 利用XPath的节点集合并操作符
|,将两个可能的取值路径合并为一个节点集 string()函数会自动提取节点集中第一个非空节点的文本值,优先匹配旧路径./car/owner/name,当该路径不存在时自动 fallback 到新路径./car/ownerName- 注意:路径前缀需根据实际XML结构调整——如果
ownerName直接位于根节点下,路径改为./ownerName即可
可选方案(XPath 2.0环境适用)
如果JasperReports配置支持XPath 2.0,可使用更直观的条件判断写法:
<field name="myField" class="java.lang.String"> <property name="net.sf.jasperreports.xpath.field.expression" value="if (exists(./car/owner/name)) then string(./car/owner/name) else string(./car/ownerName)"/> </field>
内容的提问来源于stack exchange,提问作者SereneAtk
相关产品推荐
相关产品推荐

