【问题标题】:Issues with XML Data sourceXML 数据源的问题
【发布时间】:2015-03-12 11:15:34
【问题描述】:

我必须在我的报告中使用 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 无法识别第二个作者标签。我需要从第二本书中同时获得“Roy”和“Jon” 元素。而且,我需要从第三个 Book 元素中同时获得“Harry”和“Potter”。能否请您告诉我如何将具有相同名称的标签中的所有值获取到数据集中。

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

【问题讨论】:

    标签: xml birt


    【解决方案1】:

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

    我认为 BIRT 报告不支持 XPath 函数。

    【讨论】:

      【解决方案2】:
      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();
              }
          }
      }
      

      【讨论】:

      • JRXmlDataSource beanColDataSource = new JRXmlDataSource("E:/ireport/dbsource.xml","/root/data");
      【解决方案3】:

      您寻求帮助以了解如何设计您的 XML 数据集,我会将 author 标签重命名为 authorFirstNameauthorLastName,这样就不会混淆 Birt 的结尾。

      【讨论】:

        猜你喜欢
        • 2013-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-28
        • 1970-01-01
        • 2011-10-26
        • 2021-09-12
        • 1970-01-01
        相关资源
        最近更新 更多