在Jasper Reports中使用XPATH过滤XML文件

时间:2015-06-30 16:02:30

标签: xml xpath jasper-reports

我正在使用Jasper Reports Studio,我有两个参数

  1. 一个XML源文件(见下文),列出了用户的名称以及他们是否处于活动状态(ACTIVE_USER = 1)或非活动状态(ACTIVE_USER = 0)
  2. 用户选择的输入源变量Active_Selection。三种可能性是“非活动用户”(值= 0),“活跃用户”(值= 1),“所有用户”(值= 2)
  3. XML文件如下:

    <ROOT>
    <USER>
      <NAME>Patrick</NAME>
      <ACTIVE_USER>1</ACTIVE_USER>
    </USER>
    <USER>
      <NAME>Fred</NAME>
      <ACTIVE_USER>0</ACTIVE_USER>
    </USER>
    </ROOT>
    

    我想根据Active_Selection

    使用xPath过滤我的XML

    以下代码允许用户选择活动或非活动用户

    <parameter name="Active_Selection" class="java.lang.Integer"/>
        <queryString language="xPath">
            <![CDATA[/ROOT/USER[ACTIVE_USER=$P{Active_Selection}]]]>
        </queryString>
    

    但是,如何让用户选择“有效”还是“非有效”或“所有用户”?

1 个答案:

答案 0 :(得分:0)

此代码有效。

请注意使用带有默认值的参数来存储临时计算

<parameter name="MinActive" class="java.lang.Integer">
        <defaultValueExpression><![CDATA[($P{Active_Selection}==0)?0:($P{Active_Selection}==1?1:0)]]></defaultValueExpression>
    </parameter>
    <parameter name="MaxActive" class="java.lang.Integer">
        <defaultValueExpression><![CDATA[($P{Active_Selection}==0)?0:($P{Active_Selection}==1?1:2)]]></defaultValueExpression>
    </parameter>
    <queryString language="xPath">
        <![CDATA[/ROOT/USER[ACTIVE_USER>=$P{MinActive} and ACTIVE_USER<=$P{MaxActive}]]]>
    </queryString>