XML数据适配器的组数据
我需要一些关于JasperReports的帮助,我正在尝试从XML文件创建一个报告作为数据适配器,我拥有的元素列表如下所示: 级别:6至5级 -专业:没有专业 级别:5至4级 -专业:没有专业 级别:首先进行级别测试 -专业:专业测试-t -专业:专业测试-t2 我也想这样打印,但在报告中,只有第一个级别打印了每个级别的第一个专业,如下所示: 级别:6至5级 -专业:没有专业 -专业:没有专业 -专业:专业测试-t 我开始怀疑是否可以将组与XML数据适配器一起使用,因为到目前为止我发现的所有示例都使用SQL数据适配器 以下是包含数据的XML:XML数据适配器的组数据,xml,jasper-reports,Xml,Jasper Reports,我需要一些关于JasperReports的帮助,我正在尝试从XML文件创建一个报告作为数据适配器,我拥有的元素列表如下所示: 级别:6至5级 -专业:没有专业 级别:5至4级 -专业:没有专业 级别:首先进行级别测试 -专业:专业测试-t -专业:专业测试-t2 我也想这样打印,但在报告中,只有第一个级别打印了每个级别的第一个专业,如下所示: 级别:6至5级 -专业:没有专业 -专业:没有专业 -专业:专业测试-t 我开始怀疑是否可以将组与XML数据适配器一起使用,因为到目前为止我发现的所有示例
<person>
<id>11111</id>
<employeeNumber>12887</employeeNumber>
<name>NAME EXAMPLE </name>
<location>3333</location>
<plan>
<planId>68</planId>
<planName>Plan Test</planName>
<plant/>
<levels>
<level>
<item>
<description>Level 6 to 5</description>
<id>1</id>
<name>Level 6 to 5</name>
</item>
<specialities>
<speciality>
<item>
<id>0</id>
<name>No Speciality</name>
</item>
<courses/>
</speciality>
</specialities>
</level>
<level>
<item>
<description>Level 5 to 4</description>
<id>20</id>
<name>Level 5 to 4</name>
</item>
<specialities>
<speciality>
<item>
<id>0</id>
<name>No Speciality</name>
</item>
<courses/>
</speciality>
</specialities>
</level>
<level>
<item>
<description>level-test-first</description>
<id>19</id>
<name>level-test-first</name>
</item>
<specialities>
<speciality>
<item>
<description>Speciality Test-t</description>
<id>9</id>
<name>Speciality Test-t</name>
</item>
</speciality>
<speciality>
<item>
<description>Speciality Test-t2</description>
<id>10</id>
<name>Speciality Test-t2</name>
</item>
<courses/>
</speciality>
</specialities>
</level>
</levels>
</plan>
11111
12887
名称示例
3333
68
计划测试
6至5级
1.
6至5级
0
没有特长
第5至4级
20
第5至4级
0
没有特长
先进行水平测试
19
先进行水平测试
专业测验
9
专业测验
专业测试-t2
10
专业测试-t2
这是我的报告:
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="pruebaGrupos" language="groovy" pageWidth="612" pageHeight="792" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="f9c990e6-305b-46fe-b9ad-f1c992e1cbb9">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="39"/>
<queryString language="XPath">
<![CDATA[/person/plan/levels/level]]>
</queryString>
<field name="levels" class="java.lang.String">
<fieldDescription><![CDATA[/person/plan/levels]]></fieldDescription>
</field>
<field name="level" class="java.lang.String">
<fieldDescription><![CDATA[/person/plan/levels/level]]></fieldDescription>
</field>
<field name="item" class="java.lang.String">
<fieldDescription><![CDATA[/person/plan/levels/level/item]]></fieldDescription>
</field>
<field name="id" class="java.lang.String">
<fieldDescription><![CDATA[/person/plan/levels/level/item/id]]></fieldDescription>
</field>
<field name="name" class="java.lang.String">
<fieldDescription><![CDATA[/person/plan/levels/level/item/name]]></fieldDescription>
</field>
<field name="item2" class="java.lang.String">
<fieldDescription><![CDATA[specialities/speciality/item]]></fieldDescription>
</field>
<field name="name2" class="java.lang.String">
<fieldDescription><![CDATA[specialities/speciality/item/name]]></fieldDescription>
</field>
<group name="groupLevel">
<groupExpression><![CDATA[$F{name}]]></groupExpression>
<groupHeader>
<band height="50">
<textField isStretchWithOverflow="true" isBlankWhenNull="true">
<reportElement x="0" y="0" width="100" height="20" uuid="64397dc7-2588-4642-8e52-dc8861242ac4"/>
<textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
</textField>
</band>
</groupHeader>
<groupFooter>
<band height="50"/>
</groupFooter>
</group>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="79" splitType="Stretch"/>
</title>
<pageHeader>
<band height="35" splitType="Stretch"/>
</pageHeader>
<columnHeader>
<band height="61" splitType="Stretch">
<staticText>
<reportElement x="100" y="0" width="100" height="20" uuid="935a54a5-d57d-4f6c-8dfb-93a0ec95ad01"/>
<text><![CDATA[Speciality Name]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="125" splitType="Stretch">
<textField>
<reportElement x="100" y="0" width="100" height="20" uuid="0b37e00b-b798-4795-bb62-f50c752fae59"/>
<textFieldExpression><![CDATA[$F{name2}]]></textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band height="45" splitType="Stretch"/>
</columnFooter>
<pageFooter>
<band height="54" splitType="Stretch"/>
</pageFooter>
<summary>
<band height="42" splitType="Stretch"/>
</summary>
有人能告诉我我做错了什么吗?提前谢谢。我找到了答案,不确定这是否是最好的方法,但它对我很有效: 对于主报告,XPath应该是要用作组元素的参数的路径,按照所描述的场景,应该类似于:
<queryString language="XPath">
<![CDATA[/person/plan/levels/level]]>
</queryString>
然后在“详细信息”栏中创建子报表,子报表应使用数据源表达式,其中使用第二组元素的路径,类似于:
<detail>
<band height="18" splitType="Stretch">
<subreport>
<reportElement x="0" y="0" width="572" height="18" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true" uuid="64769eb9-baec-4995-a139-3a5f102f4764"/>
<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("/level/specialities/speciality")]]></dataSourceExpression>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "subReport.jasper"]]></subreportExpression>
</subreport>
</band>
</detail>
现在填充子报表,如果要对其上的更多元素进行分组,应该在要分组的元素中启动XPath,就像在主报表中一样。如果要创建第三个组,这应该可以工作,只需创建子报表并重复该过程
我希望这对其他人有所帮助,如果需要,我可以扩展解释,只需提问。我找到了解决方案,您只能对一个元素进行分组,对于另一个元素,您必须使用子报表,XPath应该是要从中开始分组的父元素的路径。