带有queryString的JRXmlDataSource不提供任何记录

时间:2012-03-01 13:25:32

标签: jasper-reports

我遇到了Jasper Reports的XML数据源问题。当我在selectExpression构造函数中使用JRXmlDataSource时,一切正常,但当我在queryString中使用.jrxml时,我没有记录。

工作示例:

JRXmlDataSource ds2 = new JRXmlDataSource(new FileInputStream(dataSourceFile), "/pages/page");

不工作的例子:

JRXmlDataSource ds1 = new JRXmlDataSource(new FileInputStream(dataSourceFile));

<jasperReport>
    <queryString language="xPath">
        <![CDATA[/pages/page]]>
    </queryString>
    ...
</jasperReport>

数据XML:

<?xml version="1.0" encoding="UTF-8"?>
<pages>
    <page>
        <firstname>X</firstname>
        <lastname>Y</lastname>
    </page>
    <page>
        <firstname>Z</firstname>
        <lastname>V</lastname>
    </page>
    <page>
        <firstname>B</firstname>
        <lastname>S</lastname>
    </page>
</pages>

1 个答案:

答案 0 :(得分:7)

我找到了解决方案。它不是将XML dataSource传递给JasperFillManager,而是可以传递如下的XML文档。现在<queryString language="xPath"> .jrxml模板中的XPath可以处理传递的文档,这就是我想要的。

Document document = JRXmlUtils.parse(JRLoader.getLocationInputStream(dataSourceFile));
params.put(JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT, document);
jasperPrint = JasperFillManager.fillReport(jasperReport, params);