XML 数据源的问题



我必须在报表中使用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标签重命名为authorFirstNameauthorLastName,以免Birt的末尾混淆。

最新更新