XML数据源的问题

时间:2015-03-12 11:15:35

标签: xml birt

我必须在报告中使用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和 列映射:映射所有子标记

在数据集中,我得到三条记录,每条记录一条记录。但是,作者列仅包含第一个标记的值。例如,第二个记录仅包含&#34; Roy&#34;。第二个作者标签未被BIRT识别。我需要得到两个&#34; Roy&#34; &安培; &#34;乔恩&#34;从第二本书 元件。而且,我需要得到两个&#34; Harry&#34; &安培; &#34;波特&#34;来自第三本书元素。您能否告诉我如何将具有相同名称的标签中的所有值都添加到数据集中。

感谢您的帮助。请告诉我如何设计XML数据集。

2 个答案:

答案 0 :(得分:0)

在您的数据集中,您可以创建多个列,例如作者[1],作者[2],作者[3]。然后,您可以创建一个将这些列连接在一起的计算列。

我认为BIRT报告不支持XPath功能。

答案 1 :(得分:0)

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();
        }
    }
}