繁体   English   中英

XML数据源问题

[英]Issues with XML Data source

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

在数据集中,我得到了三个记录,每个标记一个。 但是,author列仅包含第一个标记的值。例如,第二条记录仅包含“ Roy”。 BIRT无法识别第二个作者标签。 我需要从第二本书元素中同时获得“罗伊”和“乔恩”。 而且,我需要从Book的第三个元素中同时获取“ Harry”和“ Potter”。 您能否让我知道如何从具有相同名称的标签中获取所有值到数据集中。

感谢您的帮助。 请让我知道如何设计XML数据集。

在数据集中,您可以创建多个列,例如author [1],author [2],author [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的authorLastName造成混乱。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM