我遇到了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>
答案 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);