How to save an xml string in a document?

0

I want to save my xml which is a str (return of an API) in an .xml file, but when I do this it does not work, could anyone help me?

from xml.dom import minidom
cont = minidom.parseString(xml)
arquivo = open(local_save, 'wb')
cont.writexml(arquivo)
arquivo.close()

The function I'm using would be this: All values in it are str, and I want to convert this str to an .xml document

def salvarXML(self, xml, caminho, chNFe, tpEvento, nSeqEvento):
    local_save = caminho + tpEvento + chNFe + nSeqEvento + '-NFe.xml'
    cont = minidom.parseString(xml)
    arquivo = open(local_save, 'wb')
    cont.writexml(arquivo)
    arquivo.close()

The xml that is as string:

 ?xml version="1.0" encoding="utf-8"?>
<NFe>
    <infNFe versao="4.00" Id="NFe43181107364617000135550000000048051004621865">
        <ide>
            <cUF>43</cUF>
            <cNF>00462186</cNF>
            <natOp>VENDA A PRAZO - S</natOp>
            <mod>55</mod>
            <serie>0</serie>
            <nNF>4805</nNF>
            <dhEmi>2018-11-05T09:55:59-02:00</dhEmi>
            <tpNF>1</tpNF>
            <idDest>1</idDest>
            <cMunFG>4305108</cMunFG>
            <tpImp>1</tpImp>
            <tpEmis>1</tpEmis>
            <cDV>5</cDV>
            <tpAmb>2</tpAmb>
            <finNFe>1</finNFe>
            <indFinal>0</indFinal>
            <indPres>9</indPres>
            <procEmi>0</procEmi>
            <verProc>4.00|NS_API</verProc>
        </ide>
        <emit>
            <CNPJ>00000000000000</CNPJ>
            <xNome>Teste de Acentos: áéíóâêãõàèìò �?É�?ÓÂÊÃÕÀÈÌÒ</xNome>
            <enderEmit>
                <xLgr>Rua Bento Osvaldo Trisch</xLgr>
                <nro>.</nro>
                <xCpl></xCpl>
                <xBairro>Pendancino</xBairro>
                <cMun>4303509</cMun>
                <xMun>Caxias do Sul</xMun>
                <UF>RS</UF>
                <CEP>95046600</CEP>
                <fone>0000000000</fone>
            </enderEmit>
            <IE>0000000000</IE>
            <CRT>3</CRT>
        </emit>
        <dest>
            <CNPJ>00000000000000</CNPJ>
            <xNome>NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL</xNome>
            <enderDest>
                <xLgr>AV ANTONIO DURO</xLgr>
                <nro>0</nro>
                <xBairro>OLARIA</xBairro>
                <cMun>4303509</cMun>
                <xMun>CAMAQUA</xMun>
                <UF>RS</UF>
                <CEP>96180000</CEP>
                <cPais>1058</cPais>
                <xPais>BRASIL</xPais>
            </enderDest>
            <indIEDest>1</indIEDest>
            <IE>0000000000</IE>
            <email>[email protected]</email>
        </dest>
        <det nItem="1">
            <prod>
                <cProd>1440859X1_</cProd>
                <cEAN>SEM GTIN</cEAN>
                <xProd>Teste de Acentos: áéíóâêãõàèìò �?É�?ÓÂÊÃÕÀÈÌÒ</xProd>
                <NCM>87089990</NCM>
                <CEST>0107500</CEST>
                <CFOP>5101</CFOP>
                <uCom>UN</uCom>
                <qCom>1.0000</qCom>
                <vUnCom>250.0000</vUnCom>
                <vProd>250.00</vProd>
                <cEANTrib>SEM GTIN</cEANTrib>
                <uTrib>UN</uTrib>
                <qTrib>1.0000</qTrib>
                <vUnTrib>250.0000</vUnTrib>
                <indTot>1</indTot>
                <nItemPed>0</nItemPed>
            </prod>
            <imposto>
                <vTotTrib>50.00</vTotTrib>
                <ICMS>
                    <ICMS10>
                        <orig>0</orig>
                        <CST>10</CST>
                        <modBC>0</modBC>
                        <vBC>250.00</vBC>
                        <pICMS>18.00</pICMS>
                        <vICMS>45.00</vICMS>
                        <vBCFCP>250.00</vBCFCP>
                        <pFCP>2.00</pFCP>
                        <vFCP>5.00</vFCP>
                        <modBCST>4</modBCST>
                        <pMVAST>32.00</pMVAST>
                        <pRedBCST>0.00</pRedBCST>
                        <vBCST>330.00</vBCST>
                        <pICMSST>18.00</pICMSST>
                        <vICMSST>14.40</vICMSST>
                        <vBCFCPST>330.00</vBCFCPST>
                        <pFCPST>2.00</pFCPST>
                        <vFCPST>1.60</vFCPST>
                    </ICMS10>
                </ICMS>
                <IPI>
                    <cEnq>999</cEnq>
                    <IPINT>
                        <CST>53</CST>
                    </IPINT>
                </IPI>
                <PIS>
                    <PISAliq>
                        <CST>01</CST>
                        <vBC>250.00</vBC>
                        <pPIS>1.65</pPIS>
                        <vPIS>4.12</vPIS>
                    </PISAliq>
                </PIS>
                <COFINS>
                    <COFINSAliq>
                        <CST>01</CST>
                        <vBC>250.00</vBC>
                        <pCOFINS>7.60</pCOFINS>
                        <vCOFINS>19.00</vCOFINS>
                    </COFINSAliq>
                </COFINS>
            </imposto>
        </det>
        <total>
            <ICMSTot>
                <vBC>250.00</vBC>
                <vICMS>45.00</vICMS>
                <vICMSDeson>0.00</vICMSDeson>
                <vFCPUFDest>0.00</vFCPUFDest>
                <vICMSUFDest>0.00</vICMSUFDest>
                <vICMSUFRemet>0.00</vICMSUFRemet>
                <vFCP>5.00</vFCP>
                <vBCST>330.00</vBCST>
                <vST>14.40</vST>
                <vFCPST>1.60</vFCPST>
                <vFCPSTRet>0.00</vFCPSTRet>
                <vProd>250.00</vProd>
                <vFrete>0.00</vFrete>
                <vSeg>0.00</vSeg>
                <vDesc>0.00</vDesc>
                <vII>0.00</vII>
                <vIPI>0.00</vIPI>
                <vIPIDevol>0.00</vIPIDevol>
                <vPIS>4.12</vPIS>
                <vCOFINS>19.00</vCOFINS>
                <vOutro>0.00</vOutro>
                <vNF>266.00</vNF>
                <vTotTrib>50.00</vTotTrib>
            </ICMSTot>
        </total>
        <transp>
            <modFrete>1</modFrete>
            <transporta>
                <CNPJ>0000000000000</CNPJ>
                <xNome>EL TESTE</xNome>
                <IE>0000000000</IE>
                <xEnder>ESTR BENTO OSVALDO TRISCH</xEnder>
                <xMun>CAXIAS DO SUL</xMun>
                <UF>RS</UF>
            </transporta>
            <veicTransp>
                <placa>ABC1234</placa>
                <UF>RS</UF>
                <RNTC>12345678</RNTC>
            </veicTransp>
            <vol>
                <qVol>0</qVol>
                <marca>TESTE</marca>
                <nVol>0</nVol>
                <pesoL>0.000</pesoL>
                <pesoB>0.000</pesoB>
            </vol>
        </transp>
        <pag>
            <detPag>
                <tPag>15</tPag>
                <vPag>266.00</vPag>
            </detPag>
            <vTroco>0.00</vTroco>
        </pag>
        <infAdic>
            <infCpl>Teste de Acentos: áéíóâêãõàèìò �?É�?ÓÂÊÃÕÀÈÌÒ DESCONTO PIS 0,01 COFINS 0,06 LEI 11.196 DE 21/11/2005</infCpl>
        </infAdic>
    </infNFe>
</NFe>

I get this xml through this code that calls my saved xml function:

    if(tpDown.upper().count('X') == 1):
        xml = resposta['xml']
        self.salvarXML(self, xml, caminho, chNFe, '', '')

Json returned by API:

{'status': 200, 'motivo': 'Consulta realizada com sucesso', 'chNFe': '43181107364617000135550000000048051004621865', 'xml':[...]
    
asked by anonymous 12.11.2018 / 19:44

1 answer

1

I took the xml str and simply encode it into an open 'wb' file, so that it would become bytes and can be written without problems, as we can see in my function:

def salvarXML(self, xml, caminho, chNFe, tpEvento, nSeqEvento):
    local_save = caminho + tpEvento + chNFe + nSeqEvento + '-NFe.xml'
    arquivo = open(local_save, 'wb')
    arquivo.write(str(xml).encode())
    arquivo.close()
    return
    
13.11.2018 / 12:02