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

mar*_*osh 4 jasper-reports

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

工作实例:

JRXmlDataSource ds2 = new JRXmlDataSource(new FileInputStream(dataSourceFile), "/pages/page");
Run Code Online (Sandbox Code Playgroud)

不工作的例子:

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

<jasperReport>
    <queryString language="xPath">
        <![CDATA[/pages/page]]>
    </queryString>
    ...
</jasperReport>
Run Code Online (Sandbox Code Playgroud)

数据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>
Run Code Online (Sandbox Code Playgroud)

mar*_*osh 7

我找到了解决方案.JasperFillManager可以传递XML文档,而不是传递XML dataSource .现在<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);
Run Code Online (Sandbox Code Playgroud)