我必须在报表中使用XML作为数据源。我的 xml 有多个同名的子标签(例如作者)。请参考下面粘贴的 XML。
<BookStore>
<Book>
<title>History</title>
<author>Tom</author>
<copies>10;</copies>
<price>80</price>
</Book>
<Book>
<title>Basic Mathematics</title>
<author>Roy</author>
<author>Jon</author>
<copies>5</copies>
<price>100</price>
</Book>
<Book>
<title>Java</title>
<author>Harry</author>
<author>Potter</author>
<copies>6</copies>
<price>100</price>
</Book>
</BookStore>
我在报表中添加了一个 XML 数据源和一个数据集。我在 XML 数据集中进行了以下映射。
行映射:/BookStore/Book 和列映射:映射所有子标记
在数据集中,我得到了三条记录,每个标签一条。但是,作者列仅包含第一个标记的值。例如,第二条记录仅包含"Roy"。BIRT无法识别第二作者标签。我需要从第二本书中同时获得"罗伊"和"乔恩"元素。而且,我需要从第三本书元素中同时获得"哈利"和"波特"。您能否告诉我如何将同名标签中的所有值获取到数据集中。
感谢您的帮助。请让我知道如何设计 XML 数据集。
在你的数据集中,你可以创建多个列,如作者[1]、作者[2]、作者[3]。然后,您可以创建一个将这些列连接在一起的计算列。
我认为 BIRT 报告中不支持 XPath 函数。
public class ExportPDF {
public static void main(String[] args) throws JRException {
String sourceFileName = "E:/ireport/issueVoucher.jasper";
String printFileName = null;
JRXmlDataSource beanColDataSource = new JRXmlDataSource("E:/ireport/dbsource.xml","/root/data");
Map<String, Object> parameters = new HashMap<String,Object>();
parameters.put("reqNo", "33434");
parameters.put("requestorName", "Shaan");
parameters.put("empCode", "E03030");
parameters.put("voucherNo", "E03030");
parameters.put("issueDate", "E03030");
parameters.put(JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT, beanColDataSource);
try {
printFileName = JasperFillManager.fillReportToFile(sourceFileName, parameters, beanColDataSource);
if (printFileName != null) {
JasperExportManager.exportReportToPdfFile(printFileName, "E:/sample_report.pdf");
JRXlsExporter exporter = new JRXlsExporter();
exporter.setParameter(JRExporterParameter.INPUT_FILE_NAME, printFileName);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "E:/sample_report.xls");
exporter.exportReport();
System.out.println("done!!!!!!!!!!!!!!!!");
}
}catch (JRException e) {
e.printStackTrace();
}
}
}
您寻求帮助以了解如何设计XML数据集,我将author
标签重命名为authorFirstName
和authorLastName
,以免Birt的末尾混淆。