I have a problem reading a certain part of an xml file that I am transforming into a JSON file.
First I get this file with class File
and play it in my class XmlParser
, responsible for parsing my xml file, then I play on JsonBuilder
to create my structure JSON .
The problem starts there, if I analyze a normal structure, which is not a list, it goes normal, but when it arrives in a list it joins those 3 in one and it all stays stuck, I tried to put the part of the "father "inside a for with a [i]
(counter) soon after so he knows how to differentiate, only that it gives an error of JsonDelegator
.
So I put this for only within the attributes of this class and a [i]
in the path of the parent class, before the attributes, but it only takes the last one. The class I am referring to is a list softwareHouse
ARCHVIO XML
<?xml version="1.0" encoding="UTF-8"?>
<eSocial xmlns="http://www.esocial.gov.br/schema/evt/evtInfoEmpregador/v02_04_00">
<evtInfoEmpregador Id="ID1111111111111112017120410223600001">
<ideEvento>
<tpAmb>1</tpAmb>
<procEmi>1</procEmi>
<verProc>2.3</verProc>
</ideEvento>
<ideEmpregador>
<tpInsc>1</tpInsc>
<nrInsc>11111111111111</nrInsc>
</ideEmpregador>
<infoEmpregador>
<inclusao>
<idePeriodo>
<iniValid>2017-01</iniValid>
<fimValid>2017-02</fimValid>
</idePeriodo>
<infoCadastro>
<nmRazao>Bruno</nmRazao>
<classTrib>03</classTrib>
<natJurid>1015</natJurid>
<indCoop>1</indCoop>
<indConstr>1</indConstr>
<indDesFolha>1</indDesFolha>
<indOptRegEletron>1</indOptRegEletron>
<indEntEd>S</indEntEd>
<indEtt>S</indEtt>
<nrRegEtt>222222222222222222222222222222</nrRegEtt>
<dadosIsencao>
<ideMinLei>DC - Destrito</ideMinLei>
<nrCertif>3333333333333333333333333333333333333333</nrCertif>
<dtEmisCertif>2003-03-03</dtEmisCertif>
<dtVencCertif>2004-04-04</dtVencCertif>
<nrProtRenov>4444444444444444444444444444444444444444</nrProtRenov>
<dtProtRenov>2005-05-05</dtProtRenov>
<dtDou>2006-06-06</dtDou>
<pagDou>55555</pagDou>
</dadosIsencao>
<contato>
<nmCtt>Raposa</nmCtt>
<cpfCtt>66666666666</cpfCtt>
<foneFixo>77777777777</foneFixo>
<foneCel>88888888888</foneCel>
<email>[email protected]</email>
</contato>
<infoOP>
<nrSiafi>888888</nrSiafi>
<infoEFR>
<ideEFR>S</ideEFR>
<cnpjEFR>99999999999999</cnpjEFR>
</infoEFR>
<infoEnte>
<nmEnte>Elefante</nmEnte>
<uf>RO</uf>
<codMunic>1100320</codMunic>
<indRPPS>S</indRPPS>
<subteto>1</subteto>
<vrSubteto>111111111111.11</vrSubteto>
</infoEnte>
</infoOP>
<infoOrgInternacional>
<indAcordoIsenMulta>1</indAcordoIsenMulta>
</infoOrgInternacional>
<softwareHouse>
<cnpjSoftHouse>22222222222222</cnpjSoftHouse>
<nmRazao>Gael</nmRazao>
<nmCont>Trator</nmCont>
<telefone>33333333344</telefone>
<email>[email protected]</email>
</softwareHouse>
<softwareHouse>
<cnpjSoftHouse>33333333333333</cnpjSoftHouse>
<nmRazao>Rafa</nmRazao>
<nmCont>Terror</nmCont>
<telefone>44444444444</telefone>
<email>[email protected]</email>
</softwareHouse>
<softwareHouse>
<cnpjSoftHouse>55555555555555</cnpjSoftHouse>
<nmRazao>Leao</nmRazao>
<nmCont>Formiga</nmCont>
<telefone>66666666666</telefone>
<email>[email protected]</email>
</softwareHouse>
<infoComplementares>
<situacaoPJ>
<indSitPJ>1</indSitPJ>
</situacaoPJ>
<situacaoPF>
<indSitPF>2</indSitPF>
</situacaoPF>
</infoComplementares>
</infoCadastro>
</inclusao>
</infoEmpregador>
</evtInfoEmpregador>
</eSocial>
ARCHIVE.GROOVY
package teste.esocial.groovy
import groovy.json.JsonBuilder
import groovy.json.JsonSlurper
//Pego o arquivo da minha pasta
def inputFile = new File("C:\Users\Bruno\Desktop\ProjetosGroovy\PrimeiroTeste\xmleSocial\s1000.xml")
//XmlParser - Para pegar meu arquivo xml no File e analisar| Coloca .text pois sem ele alega erro
//Não alegaria erro se eu tivesse colocado o xml direto aqui
def parsearXml = new XmlParser().parseText(inputFile.text)
//Variavel que vai montar meu arquivo JSON com base em meu arquivo XML
//Esse JsonBuilder() serve para eu montar meu JSON
def json = new JsonBuilder()
def i
def parada = parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.softwareHouse.size()
println parada
//Aqui estou montando minha estrutura
json.eSocial {
evtInfoEmpregador {
ideEvento {
tpAmb parsearXml.evtInfoEmpregador.ideEvento.tpAmb.text()
procEmi parsearXml.evtInfoEmpregador.ideEvento.procEmi.text()
verProc parsearXml.evtInfoEmpregador.ideEvento.verProc.text()
}
ideEmpregador {
tpInsc parsearXml.evtInfoEmpregador.ideEmpregador.tpInsc.text()
nrInsc parsearXml.evtInfoEmpregador.ideEmpregador.nrInsc.text()
}
infoEmpregador {
inclusao {
idePeriodo {
iniValid parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.idePeriodo.iniValid.text()
fimValid parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.idePeriodo.fimValid.text()
}
infoCadastro {
nmRazao parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.nmRazao.text()
classTrib parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.classTrib.text()
natJurid parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.natJurid.text()
indCoop parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.indCoop.text()
indConstr parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.indConstr.text()
indDesFolha parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.indDesFolha.text()
indOptRegEletron parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.indOptRegEletron.text()
indEntEd parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.indEntEd.text()
indEtt parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.indEtt.text()
nrRegEtt parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.nrRegEtt.text()
dadosIsencao {
ideMinLei parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.dadosIsencao.ideMinLei.text()
nrCertif parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.dadosIsencao.nrCertif.text()
dtEmisCertif parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.dadosIsencao.dtEmisCertif.text()
dtVencCertif parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.dadosIsencao.dtVencCertif.text()
nrProtRenov parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.dadosIsencao.nrProtRenov.text()
dtProtRenov parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.dadosIsencao.dtProtRenov.text()
dtDou parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.dadosIsencao.dtDou.text()
pagDou parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.dadosIsencao.pagDou.text()
}
contato {
nmCtt parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.contato.nmCtt.text()
cpfCtt parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.contato.cpfCtt.text()
foneFixo parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.contato.foneFixo.text()
foneCel parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.contato.foneCel.text()
email parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.contato.email.text()
}
infoOP {
nrSiafi parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoOP.nrSiafi.text()
infoEFR {
ideEFR parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoOP.infoEFR.ideEFR.text()
cnpjEFR parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoOP.infoEFR.cnpjEFR.text()
}
infoEnte {
nmEnte parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoOP.infoEnte.nmEnte.text()
uf parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoOP.infoEnte.uf.text()
codMunic parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoOP.infoEnte.codMunic.text()
indRPPS parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoOP.infoEnte.indRPPS.text()
subteto parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoOP.infoEnte.subteto.text()
vrSubteto parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoOP.infoEnte.vrSubteto.text()
}
}
infoOrgInternacional {
indAcordoIsenMulta parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoOrgInternacional.indAcordoIsenMulta.text()
}
softwareHouse {
for(i = 0; i < parada; i++) {
cnpjSoftHouse parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.softwareHouse[i].cnpjSoftHouse.text()
nmRazao parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.softwareHouse[i].nmRazao.text()
nmCont parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.softwareHouse[i].nmCont.text()
telefone parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.softwareHouse[i].telefone.text()
email parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.softwareHouse[i].email.text()
}
}
}
infoComplementares {
situacaoPJ {
indSitPJ parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoComplementares.situacaoPJ.indSitPJ.text()
}
situacaoPF {
indSitPF parsearXml.evtInfoEmpregador.infoEmpregador.inclusao.infoCadastro.infoComplementares.situacaoPF.indSitPF.text()
}
}
}
}
}
}
//Mostra a estrutura JSON
println json.toPrettyString()
EXECUTION
{
"eSocial": {
"evtInfoEmpregador": {
"ideEvento": {
"tpAmb": "1",
"procEmi": "1",
"verProc": "2.3"
},
"ideEmpregador": {
"tpInsc": "1",
"nrInsc": "11111111111111"
},
"infoEmpregador": {
"inclusao": {
"idePeriodo": {
"iniValid": "2017-01",
"fimValid": "2017-02"
},
"infoCadastro": {
"nmRazao": "Bruno",
"classTrib": "03",
"natJurid": "1015",
"indCoop": "1",
"indConstr": "1",
"indDesFolha": "1",
"indOptRegEletron": "1",
"indEntEd": "S",
"indEtt": "S",
"nrRegEtt": "222222222222222222222222222222",
"dadosIsencao": {
"ideMinLei": "DC - Destrito",
"nrCertif": "3333333333333333333333333333333333333333",
"dtEmisCertif": "2003-03-03",
"dtVencCertif": "2004-04-04",
"nrProtRenov": "4444444444444444444444444444444444444444",
"dtProtRenov": "2005-05-05",
"dtDou": "2006-06-06",
"pagDou": "55555"
},
"contato": {
"nmCtt": "Raposa",
"cpfCtt": "66666666666",
"foneFixo": "77777777777",
"foneCel": "88888888888",
"email": "[email protected]"
},
"infoOP": {
"nrSiafi": "888888",
"infoEFR": {
"ideEFR": "S",
"cnpjEFR": "99999999999999"
},
"infoEnte": {
"nmEnte": "Elefante",
"uf": "RO",
"codMunic": "1100320",
"indRPPS": "S",
"subteto": "1",
"vrSubteto": "111111111111.11"
}
},
"infoOrgInternacional": {
"indAcordoIsenMulta": "1"
},
"softwareHouse": {
"cnpjSoftHouse": "55555555555555",
"nmRazao": "Leao",
"nmCont": "Formiga",
"telefone": "66666666666",
"email": "[email protected]"
}
},
"infoComplementares": {
"situacaoPJ": {
"indSitPJ": "1"
},
"situacaoPF": {
"indSitPF": "2"
}
}
}
}
}
}
}
As you can see, this softwareHouse
only appears once (the last xml softwareHouse), but my goal is to make all of them appear, with the right attributes.