2

我正在使用 BIRT 报告,以 xml 格式生成它,我正在编写发射器(BIRT 插件)。我需要一个 xml 报告,其中包含基于同一报告中某些部分的一些重复部分。我为此使用 subReports。所以报告结构就像


List--
  Header--
    Table---(No header and footer)
       details--- 
          Cell----
             Text(Multiple text here) Some static section and dynamic data
List Details ----
   Table--(No header and footer)(This table will be repeated for every record in the header part)
      Details--
          Cell --
             Multiple Text elements ()`
List Footer---- Empty

在编写发射器时,我需要提取主要在 Cell 元素中的所有文本元素的内容。现在以下是我的发射器中 sartCell 方法的代码。

    public void startCell(ICellContent arg0) {
    System.out.println("text in Cell:: ");
    System.out.println("text in Cell:: " + arg0.getInstanceID());

    for(Object ie : arg0.getChildren())
    {
        if(ie instanceof  LabelContent)
        {
            LabelContent lc = (LabelContent)ie;
            stringBuilder.append(lc.getText());
            System.out.println(lc.getText());
        }
        else if(ie instanceof ForeignContent)
        {
            ForeignContent fc = (ForeignContent)ie;
            stringBuilder.append(fc.getRawValue());
            System.out.println(fc.getRawValue());
        }

    }

}

我可以使用此逻辑访问 Cell 及其所有文本内容。但是我想对 List 的 Details 部分中的 Table 的所有单元格做同样的事情。问题是细节部分中的单元格在 ICellContent.getChildren() 上给出了 null。

是的,我的 startText 方法根本没有被调用。以下是我的委托人的声明,

公共类 XmlEmittor 扩展 ContentEmitterAdapter {...}

以下是 rptDesign 结构,

<List>
    <Header>
           <Table><Detail><Cell><Text>...DynamicText....</Text>.....</Table>
    </Header>
    <Detail>
           <Table><Detail><Cell><Text>...DynamicText....</Text>.....</Table>
    </Detail>
</List>

在上述结构中,我的文本元素本身具有我想要生成报告的 XML 结构。所以我只想附加我的 xml 的所有内容并将其写入输出流。请建议,提前谢谢

4

1 回答 1

0

如果是文本元素,

public void startText(ITextContent text) 

或者

public void startData(IDataContent data) throws BirtException

将被调用,但在动态文本元素的情况下

public void startForeign(IForeignContent foreign) throws BirtException

将被调用。

您可以使用下面的代码片段来获取动态文本值

@Override
public void startForeign(IForeignContent foreign) throws BirtException {        
    Object rawValue = foreign.getRawValue();    
}
于 2013-12-11T15:52:28.513 回答