使用XML作为数据源从CSV字段创建数据集

时间:2013-06-20 08:59:04

标签: xml jasper-reports ireport

是否可以使用iReport / JasperReports在XML文件中绘制CSV字段?

我有一个XML文件,其中一个字段如下所示:

<values>48,59,59,58,53,53,52,55,50,52,54,56,57,59,60,57,56,55,58,62</values>

如何使用这些数字创建情节?或者我如何使用这些数字来创建可以在绘图中使用的子数据集?


UPDATE :我创建了一个String []变量,其变量表达式如下:

<variableExpression><![CDATA[$F{values}.split(",")]]></variableExpression>

所以现在我有一个字符串数组,但我仍然找不到绘制它的方法。任何想法?
这家伙也有这个问题,没有人回答他:building a Chart with an Array


UPDATE2 :现在String []已转换为Arrays.asList($F{values}.split(","))的列表。但我不知道在图表系列中我可以使用什么作为类别表达式:

enter image description here

2 个答案:

答案 0 :(得分:1)

实现您自己的JrDataSource,它将处理您的csv值并使用子数据源为您的绘图添加

<dataSourceExpression><![CDATA[new YourDataSource(${$F{values}})]></dataSourceExpression>

答案 1 :(得分:0)

正如@josefprochazka指出的那样,解决方案是创建一个Custom DataSource并将其传递给子报告。但我不是JasperReports专家,创建自定义数据源花了我一段时间。所以这是解决方案,代码和&amp;教程。我将分三步进行划分:

  1. 您必须创建一个* .jar,其中包含implements JRDataSource(这将是您的自定义数据源)的类
  2. 将该jar添加到Java项目和/或iReport
  3. 在iReport / jrxml中创建自定义数据源的实例并将其传递给子报告
  4. 所以,一旦你知道怎么做,第一步就不那么难了。我使用了以下教程:http://community.jaspersoft.com/wiki/building-custom-datasource-yahoo-finance-data
    基本上你要做的就是实现两种方法:getFieldValue(JRField f)next()。以下是使用3个字段的完整示例:http://pastebin.com/jX0wJVGi
    完成该类后,使用它创建一个.jar并将其添加到项目类路径中。 在iReport中,转到工具 - >选项,选择“ Classpath ”选项卡并在那里添加jar。
    如果您在那里使用JasperReports,那么在Eclipse中也是如此。

    最后,我们将在报告中实例化自定义DS:

    <subreport>
        <reportElement uuid="52f64c56-b410-45a7-b391-828ef35e0103" positionType="Float" x="0" y="245" width="555" height="32"/>
        <dataSourceExpression><![CDATA[new com.dbelectronics.BandasCSVDatasource($F{csv_field1},$F{csv_field2})]]></dataSourceExpression>
        <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "your_subreport.jasper"]]></subreportExpression>
    </subreport>
    

    正如您所看到的,我使用两个参数调用BandasCSVDatasource,每个参数包含一个由逗号分隔的20个数字的字符串。

    好吧,现在你只需要创建子报告并映射字段:

    <queryString>
        <![CDATA[]]>
    </queryString>
    <field name="Verificacion" class="java.lang.String"/>
    <field name="Calibracion" class="java.lang.String"/>
    <field name="Banda" class="java.lang.String"/>
    

    然后添加图表并使用其中的字段:example chart series

    希望它有所帮助。再次感谢约瑟夫。