Hey guys, after a lot of work I got several xml tags to play in an Excel report. But when I populate the list with my object and step into the report only the last element is listed. I already made some System.out.println
to show the elements of the list but in the same, only the last element appears. Can anyone help? I made another list to test with the name of beneficiariesLote and I did not take it yet, with it I can list everything when I make a FOR, however I do not know how to pass a list that has no link with an object for Excel. Thanks
SUMMARY:
I want to get the data from the list and fill in an object called UnimedLote;
my listaLote
returns the last element all requested, that is, I think the values in my list are being replaced every iteration of FOR that takes the data of the tags in xml. When I do a debug line with SysOut picking up the object contact it normal list:
ButwhenItrytodisplaythelistthisiswhatappears:
This image shows only one section because the list is extensive, but the same client is repeated throughout the list.
public List<UnimedLote> 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);
Element elem = doc.getDocumentElement();
NodeList tagdadosLote = elem.getElementsByTagName("unimed:dadosLote");
List<UnimedLote> listaLote = new ArrayList<>();
System.out.printf("\n tagdadosLote %s ", tagdadosLote.getLength());
UnimedLote contato = new UnimedLote();
for (int i = 0; i < tagdadosLote.getLength(); i++) {
String lote = "";
Element elementoLote = (Element) tagdadosLote.item(i);
lote = pegaTag(elementoLote, "unimed:numeroLote");
contato.setNumLote(lote);
NodeList tagGuia = (NodeList) elementoLote.getElementsByTagName("unimed:guia");
// Como sabemos pela estrutura que só tem 1 elemento não necessitamos de um for podendo fixar o indice.
NodeList tagdadosGuia = ((Element) tagGuia.item(0)).getElementsByTagName("unimed:dadosGuia");
System.err.println("LOTE: " + lote);
for (int y = 0; y < tagdadosGuia.getLength(); y++) {
NodeList tagProcedimentos = ((Element) tagdadosGuia.item(y)).getElementsByTagName("unimed:procedimentos");
NodeList tagBeneficiario0 = ((Element) tagdadosGuia.item(y)).getElementsByTagName("unimed:beneficiario");
NodeList tagProcedimentos1 = ((Element) tagProcedimentos.item(0)).getElementsByTagName("unimed:dadosProcedimento");
NodeList tagProcedimento = ((Element) tagProcedimentos1.item(0)).getElementsByTagName("unimed:procedimento");
/*Beneficiarios*/
Element elementoBeneficiario0 = (Element) tagBeneficiario0.item(0);
beneficiariosLote.add(pegaTag(elementoBeneficiario0, "unimed:numeroCarteira"));
contato.setCodigo(pegaTag(elementoBeneficiario0, "unimed:numeroCarteira"));
Element elementoBeneficiario = (Element) tagBeneficiario0.item(0);
beneficiariosLote.add(pegaTag(elementoBeneficiario, "unimed:nomeBeneficiario"));
contato.setNomeBeneficiario(pegaTag(elementoBeneficiario, "unimed:nomeBeneficiario"));
/*Beneficiarios*/
/*Dados das Guias*/
Element elementoBeneficiario1 = (Element) tagdadosGuia.item(y);
beneficiariosLote.add(pegaTag(elementoBeneficiario1, "unimed:numeroGuiaOperadora"));
contato.setNumeroDocumento(pegaTag(elementoBeneficiario1, "unimed:numeroGuiaOperadora"));
Element elementoBeneficiario2 = (Element) tagdadosGuia.item(y);
beneficiariosLote.add(pegaTag(elementoBeneficiario2, "unimed:valorProcessadoGuia"));
Element elementoBeneficiario3 = (Element) tagdadosGuia.item(y);
beneficiariosLote.add(pegaTag(elementoBeneficiario3, "unimed:valorLiberadoGuia"));
/*Dados das Guias*/
/*Procedimentos*/
Element elementoBeneficiario4 = (Element) tagProcedimentos1.item(0);
beneficiariosLote.add(pegaTag(elementoBeneficiario4, "unimed:valorProcessado"));
Element elementoBeneficiario5 = (Element) tagProcedimentos1.item(0);
beneficiariosLote.add(pegaTag(elementoBeneficiario5, "unimed:dataProcedimento"));
contato.setData(pegaTag(elementoBeneficiario5, "unimed:dataProcedimento"));
//Procedimento(tag que fica dentro de procedimentos)!!
Element elementoBeneficiario6 = (Element) tagProcedimento.item(0);
beneficiariosLote.add(pegaTag(elementoBeneficiario6, "unimed:codigo"));
contato.setProcedimento(pegaTag(elementoBeneficiario6, "unimed:codigo"));
Element elementoBeneficiario7 = (Element) tagProcedimento.item(0);
beneficiariosLote.add(pegaTag(elementoBeneficiario7, "unimed:descricao"));
contato.setDescricaoProced(pegaTag(elementoBeneficiario7, "unimed:descricao"));
//Procedimento(tag que fica dentro de procedimentos)!!
Element elementoBeneficiario8 = (Element) tagProcedimentos1.item(0);
beneficiariosLote.add(pegaTag(elementoBeneficiario8, "unimed:quantidadeExecutada"));
contato.setQtdExecutada(pegaTag(elementoBeneficiario8, "unimed:quantidadeExecutada"));
Element elementoBeneficiario9 = (Element) tagProcedimentos1.item(0);
String filme = pegaTag(elementoBeneficiario9, "unimed:valorFilme");
if (filme
== null) {
filme = "0";
}
BigDecimal vp = new BigDecimal(filme).setScale(2);
contato.setCustoFilme(vp);
beneficiariosLote.add(vp);
Element elementoBeneficiario10 = (Element) tagProcedimentos1.item(0);
String custo = pegaTag(elementoBeneficiario10, "unimed:valorServico");
if (custo
== null) {
custo = "0";
}
BigDecimal vc = new BigDecimal(custo).setScale(2);
contato.setCustoServico(vc);
beneficiariosLote.add(vc);
Element elementoBeneficiario11 = (Element) tagProcedimentos1.item(0);
String hon = pegaTag(elementoBeneficiario11, "unimed:valorHonorario");
if (hon
== null) {
hon = "0";
}
BigDecimal vh = new BigDecimal(hon).setScale(2);
contato.setHonorario(vh);
beneficiariosLote.add(vh);
//Dados Guias
Element elementoBeneficiario12 = (Element) tagdadosGuia.item(y);
String tot = pegaTag(elementoBeneficiario12, "unimed:valorInformado");
if (tot
== null) {
tot = "0";
}
BigDecimal vt = new BigDecimal(tot).setScale(2);
contato.setValorTotalInformado(vt);
beneficiariosLote.add(vt);
/*Dados das Guias*/
System.err.println("Contatos: " + contato);
listaLote.add(y,contato);
}
}
System.err.println("Lista lote: "+listaLote);
return listaLote;
}
Excerpt where I populate the columns in Excel: // Scroll through the list and fill in the cells
int cont2=0;
for (int i = 0; i < listaContatoslt.size(); i++) {
XSSFRow cabRowAnalitico7 = sheet1.createRow(i + 6);
for (int x = 0; x <= 12; x++) {
cabRowAnalitico7.createCell(x);
}
XSSFCell cellAnaA5 = cabRowAnalitico7.getCell(0);
cellAnaA5.setCellStyle(estiloS2);
cellAnaA5.setCellValue(listaContatoslt.get(i).getNumeroDocumento());
XSSFCell cellAnaB5 = cabRowAnalitico7.getCell(1);
cellAnaB5.setCellStyle(estiloS2);
cellAnaB5.setCellValue(listaContatoslt.get(i).getCodigo());
XSSFCell cellAnaC5 = cabRowAnalitico7.getCell(2);
cellAnaC5.setCellStyle(estiloS2);
cellAnaC5.setCellValue(listaContatoslt.get(i).getNomeBeneficiario());
cont2++;
}