Java ArrayList不会将所有元素作为ireport的数据源发送

Java ArrayList不会将所有元素作为ireport的数据源发送,java,arraylist,jasper-reports,Java,Arraylist,Jasper Reports,在ireport中,只有我的ArrayList的最后两个元素作为数据源发送。我有一个ArrayList,它将从标记读取的数据存储在xml文件中。例如,我选择了三个标记相同但数据不同的xml文件。我有一个方法可以读取这些文件并填充ArrayList,但是当我发送pro-ireport时,只有最后两个是显示的最后一个数据xml 允许您选择文件并将其发送至读取的代码,读取后返回一个列表,我将该列表作为数据源传递: private void btnPegarArquivoActionPerformed

在ireport中,只有我的ArrayList的最后两个元素作为数据源发送。我有一个ArrayList,它将从标记读取的数据存储在xml文件中。例如,我选择了三个标记相同但数据不同的xml文件。我有一个方法可以读取这些文件并填充ArrayList,但是当我发送pro-ireport时,只有最后两个是显示的最后一个数据xml

允许您选择文件并将其发送至读取的代码,读取后返回一个列表,我将该列表作为数据源传递:

 private void btnPegarArquivoActionPerformed(java.awt.event.ActionEvent evt) {                                                
// TODO add your handling code here:
JFileChooser chooser = new JFileChooser();
// Possibilita a seleção de vários arquivos
chooser.setMultiSelectionEnabled(true);

// Apresenta a caixa de diálogo
chooser.showOpenDialog(null);

// Retorna os arquivos selecionados. Este método retorna vazio se
// o modo de múltipla seleção de arquivos não estiver ativada.
File[] files = chooser.getSelectedFiles();

for (File argumento : files) {
   System.err.println("Argumentos: " + argumento.getPath());
    caminho = argumento.getPath();
    LeitorXMLDOMMelhorado parser = new LeitorXMLDOMMelhorado();

    try {
        /* List<Cliente> */
        listaContatos = (ArrayList<Cliente>) parser.realizaLeituraXML(caminho);
        System.out.println("Valores: " + listaContatos);


        for(Cliente c : listaContatos){ 
            System.out.println("Nome no Arquivo xml: "+c.getNome());
            gerarRelatorio((ArrayList) listaContatos);
        } 
    } catch (ParserConfigurationException e) {
        System.out.println("O parser não foi configurado corretamente.");
        e.printStackTrace();
    } catch (SAXException e) {
        System.out.println("Problema ao fazer o parse do arquivo.");
        e.printStackTrace();
    } catch (IOException e) {
        System.out.println("O arquivo não pode ser lido.");
        e.printStackTrace();
    }

}


}
private void btnpegarquivoActionPerformed(java.awt.event.ActionEvent evt){
//TODO在此处添加您的处理代码:
JFileChooser chooser=新的JFileChooser();
//瓦里奥斯·阿奎沃斯群岛的可能性
选择器。setMultiSelectionEnabled(真);
//一个caixa de diá徽标
chooser.showOpenDialog(空);
//斯特罗纳·奥斯·阿奎沃斯·塞莱西奥纳多斯·埃斯特·梅托多·斯特罗纳·瓦齐奥女士
//o múltipla seleço de arquivos não Estivata。
File[]files=chooser.getSelectedFiles();
用于(文件参数:文件){
System.err.println(“Argumentos:+argumento.getPath());
caminho=argumento.getPath();
LeitorXMLDOMMelhorado解析器=新的LeitorXMLDOMMelhorado();
试一试{
/*名单*/
listaContatos=(ArrayList)parser.realizaLeituraXML(caminho);
System.out.println(“Valores:+listaContatos”);
(客户c:listaContatos){
println(“Nome no Arquivo xml:+c.getNome());
gerarRelatorio((ArrayList)listaContatos);
} 
}捕获(ParserConfiguration异常e){
System.out.println(“O parser nãO foi configurado corretation.”);
e、 printStackTrace();
}捕获(SAXE异常){
System.out.println(“Problema ao fazer o parse do arquivo.”);
e、 printStackTrace();
}捕获(IOE异常){
System.out.println(“O arquivo nãO pode ser lido.”);
e、 printStackTrace();
}
}
}
生成报告的方法:

public void gerarRelatorio(ArrayList list) {
for (int i = 0; i < lista.size(); i++) {

    JasperReport report = null;

    try {
        InputStream inputStreamReal = getClass().getResourceAsStream("/br/com/testexml/relatorio/Teste.jrxml");
        report = JasperCompileManager.compileReport(inputStreamReal);

    } catch (JRException ex) {
        Logger.getLogger(TesteView.class.getName()).log(Level.SEVERE, null, ex);
    }
    try {
        JasperPrint print = JasperFillManager.fillReport(report, null, new JRBeanCollectionDataSource(list));
        JasperExportManager.exportReportToPdfFile(print,
                "C:\\relatorios/RelatorioClientes" + i + ".pdf");

    } catch (JRException ex) {
        Logger.getLogger(TesteView.class.getName()).log(Level.SEVERE, null, ex);
    }

}
}
public void gerarRelatorio(数组列表){
对于(int i=0;i
类,该类读取xml并填充列表:

public class LeitorXMLDOMMelhorado {

public List<Cliente> realizaLeituraXML(String arquivoXML) throws ParserConfigurationException, SAXException, IOException {
    //fazer o parse do arquivo e criar o documento XML
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse(arquivoXML);

    //Passo 1: obter o elemento raiz
    Element raiz = doc.getDocumentElement();
    System.out.println("O elemento raiz é: " + raiz.getNodeName());

    //Passo 2: localizar os elementos filhos da agenda
    NodeList listaContatos = raiz.getElementsByTagName("contato");

    List<Cliente> lista = new ArrayList<Cliente>(listaContatos.getLength());

    //Passo 3: obter os elementos de cada elemento contato
    for (int i = 0; i < listaContatos.getLength(); i++) {

        //como cada elemento do NodeList é um nó, precisamos fazer o cast
        Element elementoContato = (Element) listaContatos.item(i);

        //cria um objeto Contato com as informações do elemento contato
        Cliente contato = criaContato(elementoContato);
        lista.add(contato);
        //System.err.println("Listaaaaaaa: " + lista);

        // System.err.println("Lista no metodo:"+lista);

    }
    return lista;
}
公共类LeitorXMLDOMMelhorado{
public List realizaLeituraXML(字符串arquivoXML)抛出ParserConfigurationException、SAXException、IOException{
//fazer o parse do arquivo e criar o documento XML
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
documentdoc=db.parse(arquivoXML);
//第1部分:拉伊兹元素
元素raiz=doc.getDocumentElement();
System.out.println(“O elemento raizé:+raiz.getNodeName());
//第二阶段:地方议程
NodeList listaContatos=raiz.getElementsByTagName(“contato”);
List lista=newarraylist(listaContatos.getLength());
//第三部分:康塔托市地籍调查局
对于(int i=0;i
请将您的代码缩减到出现问题的重要行。即使他们可能能够解决您的问题,人们也不喜欢在您的代码中挣扎。您能否在实例化JasperPrint之前添加调试行?执行类似于JRBeanCollectionDataSource ds=new JRBeanCollectionDataSource的操作(list);System.out.println(ds.getRecordCount());然后显示输出。我的报告是这样的:调试行
System.out.println(“Nome no Arquivo xml:+c.getNome());
返回: