我需要JasperReports的一些帮助,我试图从XML文件创建一个报告作为数据适配器,我看到的元素列表如下:
等级:等级6至5 - 特殊性:没有专业 等级:5级到4级 - 特殊性:没有专业 等级:等级测试优先 - 专业:专业测试-t - 专业:专业测试-t2
我也想打印它,但在报告中,只有第一级打印的是每个级别的第一个专业,如下所示:
等级:等级6至5 - 特殊性:没有专业 - 特殊性:没有专业 - 专业:专业测试-t
我开始怀疑是否可以使用带有XML数据适配器的组,因为我到目前为止找到的所有示例都使用SQL数据适配器
以下是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>
这是我的报告:
<?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>
有人可以告诉我,如果我做错了吗?,提前谢谢。
答案 0 :(得分:0)
我找到了答案,不确定这是否是最好的方法,但它对我有用:
对于主报表,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,就像在主报告中一样,如果要创建第三个,这应该可以工作也是如此,你只需要创建一个子报告并重复这个过程。
我希望这可以帮助某人,如果需要,我可以扩展解释,只需要问。