0

I need help to consume a XML string from a SOAP server and it's working with the data in first row (or parent nodes) but when I try to get data inside (child nodes) with two or more data, just get one. Maybe a loop will help me, but I can't figure it out how to do it. Here is a example of the response:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <PedidosDisponiveisResponse xmlns="http:...">
            <PedidosDisponiveisResult>
                <ResultadoOperacao>
                    <Codigo>200001</Codigo>
                    <Descricao>Operação "Selecionar os pedidos disponiveis na integração" efetuada com sucesso. - I35249DCD</Descricao>
                    <Tipo>tdreSucesso</Tipo>
                </ResultadoOperacao>
                <VersaoWebService>50.106.92.0</VersaoWebService>
                <Rows>
                    <DadosPedidosDisponiveisWeb>
                        <CodigoPedidoAbacos>4967302</CodigoPedidoAbacos>
                        <NumeroDoPedido>2000007159352944</NumeroDoPedido>
                        <SequencialNumeroPedido>0</SequencialNumeroPedido>
                        <ProtocoloPedido>sdf-sdf</ProtocoloPedido>
                        <Comercializacao>MATRIZ - VENDA DE PRODUTOS OMNI                   </Comercializacao>
                        <GrupoComercializacao>VENDA                                             </GrupoComercializacao>
                        <StatusPedido>DESPACHADO                                        </StatusPedido>
                        <Acao>aieManutencao</Acao>
                        <PedidoWeb>
                            <ResultadoOperacao>
                                <Codigo>200001</Codigo>
                                <Descricao>Operação "Selecionar os dados do pedido que está disponivel na integração" efetuada com sucesso.</Descricao>
                                <Tipo>tdreSucesso</Tipo>
                            </ResultadoOperacao>
                            <Rows>
                                <DadosPedidoWeb>
                                    <CodigoPedido>4902</CodigoPedido>
                                    <NumeroPedido>20059352944</NumeroPedido>
                                    <CodigoUnidadeNegocio>5</CodigoUnidadeNegocio>
                                    <EMail>[email protected]</EMail>
                                    <CodigoCliente>1082</CodigoCliente>
                                    <ClienteCPFouCNPJ>99999999999</ClienteCPFouCNPJ>
                                    <RepresentanteVendas>1</RepresentanteVendas>
                                    <CodigoRepresentanteExterno>1</CodigoRepresentanteExterno>
                                    <ValorPedido>99.8</ValorPedido>
                                    <ValorFrete>71.07</ValorFrete>
                                    <ValorEncargos>0</ValorEncargos>
                                    <ValorDesconto>19900.2</ValorDesconto>
                                    <DataVenda>654987 00:00:00.000</DataVenda>
                                    <CodigoTransportadora>3</CodigoTransportadora>
                                    <Transportadora>sdf</Transportadora>
                                    <ServicoEntrega>sdf</ServicoEntrega>
                                    <CodigoAdministrativoServicoEntrega>1510</CodigoAdministrativoServicoEntrega>
                                    <TransportadoraCNPJ>987654321</TransportadoraCNPJ>
                                    <Canal>OmniOne                                           </Canal>
                                    <SubCanal>Formigão                                          </SubCanal>
                                    <EmitirNotaSimbolica>N</EmitirNotaSimbolica>
                                    <DataPrazoEntregaFinal />
                                    <OptouNFPaulista>S</OptouNFPaulista>
                                    <MensagemCorpoNota />
                                    <DiasEntregaPosPagamento />
                                    <DataPrazoEntrega>19012024 00:00:00.000</DataPrazoEntrega>
                                    <DestNome>nononononononno</DestNome>
                                    <DestEndereco>nononon</DestEndereco>
                                    <DestEnderecoLogradouro>nononn</DestEnderecoLogradouro>
                                    <DestEnderecoNumero>12654    </DestEnderecoNumero>
                                    <DestEnderecoComplemento>Referencia:nonononono</DestEnderecoComplemento>
                                    <DestBairro>sdfsdf</DestBairro>
                                    <DestCep>987654</DestCep>
                                    <DestMunicipio>sdf</DestMunicipio>
                                    <DestEstado>sdf</DestEstado>
                                    <DestPais>BRASIL                                            </DestPais>
                                    <DestSexo>E</DestSexo>
                                    <DestEmail>sdf</DestEmail>
                                    <DestTelefone>654</DestTelefone>
                                    <DestTipoPessoa>F</DestTipoPessoa>
                                    <DestCPFouCNPJ654987</DestCPFouCNPJ>
                                    <DestInscricaoEstadual>sdf</DestInscricaoEstadual>
                                    <DestInscricaoMunicipal />
                                    <DestCodigoIBGE>54</DestCodigoIBGE>
                                    <Anotacoes>
                                        <ResultadoOperacao>
                                            <Codigo>200001</Codigo>
                                            <Descricao>Operação "Selecionar as anotações do pedido" efetuada com sucesso.</Descricao>
                                            <Tipo>tdreSucesso</Tipo>
                                        </ResultadoOperacao>
                                        <Rows>
                                            <DadosPedidoAnotacaoWeb>
                                                <CodigoPedido>897</CodigoPedido>
                                                <Anotacao>Frete: 0 Obs: collectorcollector paid,not_delivered,Dest: Felipe Demosthenes</Anotacao>
                                                <DataAnotacao>654</DataAnotacao>
                                                <ClassificacaoAnotacao>COMERCIAL                                         </ClassificacaoAnotacao>
                                            </DadosPedidoAnotacaoWeb>
                                            <DadosPedidoAnotacaoWeb>
                                                <CodigoPedido>8</CodigoPedido>
                                                <Anotacao>sdf</Anotacao>
                                                <DataAnotacao>15122023 12:20:25.507</DataAnotacao>
                                                <ClassificacaoAnotacao>CRÉDITO                                           </ClassificacaoAnotacao>
                                            </DadosPedidoAnotacaoWeb>
                                        </Rows>
                                    </Anotacoes>
                                    <EstoqueReservado>S</EstoqueReservado>
                                    <PreVenda>Não</PreVenda>
                                    <TipoFrete />
                                </DadosPedidoWeb>
                            </Rows>
                        </PedidoWeb>
                        <PedidoItens>
                            <ResultadoOperacao>
                                <Codigo>200001</Codigo>
                                <Descricao>Operação "Selecionar os dados dos itens do pedido que está disponivel na integração e com estoque reservado" efetuada com sucesso.</Descricao>
                                <Tipo>tdreSucesso</Tipo>
                            </ResultadoOperacao>
                            <Rows>
***# **                                <DadosPedidoItensWeb>
#                                     <CodigoItem>7</CodigoItem>
#                                     <CodigoProdutoAbacos>1</CodigoProdutoAbacos>
#                                     <CodigoProduto>1</CodigoProduto>
#                                     <Quantidade>1</Quantidade>
#                                     <PrecoUnitarioLiquido>49.9</PrecoUnitarioLiquido>
#                                     <PrecoUnitarioBruto>10000</PrecoUnitarioBruto>
#                                     <QuantidadeReservada>0</QuantidadeReservada>
#                                     <PersonalizacaoNome />
#                                     <PersonalizacaoTexto />
#                                     <NomeProduto>Lente Farol Fiesta 03/07 Ld</NomeProduto>
#                                     <NomeComposto>Lente Farol Fiesta 03/07 Ld * Direito Passageiro * GRUPO * CAMBUCI</NomeComposto>
#                                     <CodigoBarras>654</CodigoBarras>
#                                     <Classe>ACABADO                                           </Classe>
#                                     <TipoItem>NORMAL</TipoItem>
#                                     <CodigoRastreabilidade />
#                                     <DataValidade />
#                                     <DataVencimentoGarantia />
#                                     <PreVenda>Não</PreVenda>
#                                     <Rastreabilidade>
#                                         <ResultadoOperacao>
#                                             <Codigo>200003</Codigo>
#                                             <Descricao>OK, porém não há dados.</Descricao>
#                                             <Tipo>tdreSucessoSemDados</Tipo>
#                                         </ResultadoOperacao>
#                                     </Rastreabilidade>
#                                 </DadosPedidoItensWeb>
#                                 <DadosPedidoItensWeb>
#                                     <CodigoItem>5</CodigoItem>
#                                     <CodigoProdutoAbacos>1</CodigoProdutoAbacos>
#                                     <CodigoProduto>5</CodigoProduto>
#                                     <Quantidade>1</Quantidade>
#                                     <PrecoUnitarioLiquido>49.9</PrecoUnitarioLiquido>
#                                     <PrecoUnitarioBruto>10000</PrecoUnitarioBruto>
#                                     <QuantidadeReservada>0</QuantidadeReservada>
#                                     <PersonalizacaoNome />
#                                     <PersonalizacaoTexto />
#                                     <NomeProduto>Lente Farol Fiesta 03/07 Le</NomeProduto>
#                                     <NomeComposto>Lente Farol Fiesta 03/07 Le * Esquerdo Motorista * GRUPO * CAMBUCI</NomeComposto>
#                                     <CodigoBarras>2</CodigoBarras>
#                                     <Classe>ACABADO                                           </Classe>
#                                     <TipoItem>NORMAL</TipoItem>
#                                     <CodigoRastreabilidade />
#                                     <DataValidade />
#                                     <DataVencimentoGarantia />
#                                     <PreVenda>Não</PreVenda>
#                                     <Rastreabilidade>
#                                         <ResultadoOperacao>
#                                             <Codigo>200003</Codigo>
#                                             <Descricao>OK, porém não há dados.</Descricao>
#                                             <Tipo>tdreSucessoSemDados</Tipo>
#                                         </ResultadoOperacao>
#                                     </Rastreabilidade>
#                                 </DadosPedidoItensWeb>*****
                            </Rows>
                        </PedidoItens>
                        <PedidoPagamento>
                            <ResultadoOperacao>
                                <Codigo>200001</Codigo>
                                <Descricao>Operação "Selecionar os dados dos pagamentos do pedido que está disponivel na integração" efetuada com sucesso.</Descricao>
                                <Tipo>tdreSucesso</Tipo>
                            </ResultadoOperacao>
                            <Rows>
                                <DadosPedidoPagamentoWeb>
                                    <CodigoPagamentoAbacos>1</CodigoPagamentoAbacos>
                                    <FormaPagamentoCodigo>14</FormaPagamentoCodigo>
                                    <FormaPagamento>sdf                                     </FormaPagamento>
                                    <TipoFormaPagamentoSigla>CA</TipoFormaPagamentoSigla>
                                    <Valor>170.87</Valor>
                                    <ValorPago>170.87</ValorPago>
                                    <TIDGateway />
                                    <Autorizacao />
                                    <NSU />
                                    <DataPagamento>15122023 00:00:00.000</DataPagamento>
                                    <DataVencimentoBoleto>15122023 12:20:25.290</DataVencimentoBoleto>
                                    <CondicaoPagamento />
                                    <QuantidadeParcelasCartao>1</QuantidadeParcelasCartao>
                                    <CMC7 />
                                    <Parcelas>
                                        <ResultadoOperacao>
                                            <Codigo>200001</Codigo>
                                            <Descricao>Operação "Parcelas dos pagamento com cartão" efetuada com sucesso.</Descricao>
                                            <Tipo>tdreSucesso</Tipo>
                                        </ResultadoOperacao>
                                        <Rows>
                                            <DadosPedidoPagamentoParcelasWeb>
                                                <DataAprovacao>15122023</DataAprovacao>
                                                <DataProvisaoPagamento>15122023</DataProvisaoPagamento>
                                                <ValorBruto>170.87</ValorBruto>
                                                <NumeroParcela>1</NumeroParcela>
                                                <QuantidadeParcelas>1</QuantidadeParcelas>
                                                <CodigoNSU />
                                                <CodigoAutorizacao />
                                            </DadosPedidoPagamentoParcelasWeb>
                                        </Rows>
                                    </Parcelas>
                                    <PagamentoBoleto>
                                        <ResultadoOperacao>
                                            <Codigo>200003</Codigo>
                                            <Descricao>OK, porém não há dados.</Descricao>
                                            <Tipo>tdreSucessoSemDados</Tipo>
                                        </ResultadoOperacao>
                                        <Rows />
                                    </PagamentoBoleto>
                                    <CNPJCredenciadora>54</CNPJCredenciadora>
                                    <Bandeira>99</Bandeira>
                                    <ValorDescontoFinanceiro>0</ValorDescontoFinanceiro>
                                </DadosPedidoPagamentoWeb>
                            </Rows>
                        </PedidoPagamento>
                        <ProcessoTroca>
                            <ResultadoOperacao>
                                <Codigo>200003</Codigo>
                                <Descricao>OK, porém não há dados.</Descricao>
                                <Tipo>tdreSucessoSemDados</Tipo>
                            </ResultadoOperacao>
                            <Rows>
                                <DadosProcessoTrocaWeb>
                                    <CodigoInternoNotaOrigem>0</CodigoInternoNotaOrigem>
                                    <CodigoInternoPedidoOrigem>0</CodigoInternoPedidoOrigem>
                                    <CodigoExternoPedidoOrigem />
                                </DadosProcessoTrocaWeb>
                            </Rows>
                        </ProcessoTroca>
                    </DadosPedidosDisponiveisWeb>

I need to get all two or more data inside DadosPedidoItensWeb.

Could anyone help me? I'm developing in Python with SQL Server.

Here is the my code:

import logging
import pyodbc
import requests
import xml.etree.ElementTree as ET
from io import StringIO
import datetime



def handle_soap_request(url: str, headers: dict, body: str, db_connection_string: str) -> None:
    try:
        response = requests.post(url, data=body, headers=headers)
        response_content = response.content.decode("utf-8")
        response_content = response_content.replace('&#x0;', '')


        

        xml_io = StringIO(response_content)
        
        
        

        for event, element in ET.iterparse(xml_io, events=("start", "end")):
            if event == "start" and element.tag == '{http://www.kplsolucoes.com.br/ABACOSWebService}DadosPedidosDisponiveisWeb':
                try:
                    codigoPedidoAbacos, numeroDoPedido, protocoloPedido, comercializacao, grupoComercializacao, codigoUnidadeNegocio, codigoCliente, valorPedido, valorFrete, valorEncargos, valorDesconto, dataVenda, codigoTransportadora, transportadora, servicoEntrega, transportadoraCNPJ, canal, subCanal, destCep, destMunicipio, destEstado, codigoProdutoAbacos, codigoProduto, precoUnitarioLiquido, precoUnitarioBruto, quantidadeReservada, nomeProduto, nomeComposto, codigoBarras, classe, codigoItem = (
                        element.findtext(f".//{{http://www.kplsolucoes.com.br/ABACOSWebService}}{tag}")
                        for tag in [
                            "CodigoPedidoAbacos",
                            "NumeroDoPedido",
                            "ProtocoloPedido",
                            "Comercializacao",
                            "GrupoComercializacao",
                            "CodigoUnidadeNegocio",
                            "CodigoCliente",
                            "ValorPedido",
                            "ValorFrete",
                            "ValorEncargos",
                            "ValorDesconto",
                            "DataVenda",
                            "CodigoTransportadora",
                            "Transportadora",
                            "ServicoEntrega",
                            "TransportadoraCNPJ",
                            "Canal",
                            "SubCanal",
                            "DestCep",
                            "DestMunicipio",
                            "DestEstado",
                            "CodigoProdutoAbacos",
                            "CodigoProduto",
                            "PrecoUnitarioLiquido",
                            "PrecoUnitarioBruto",
                            "QuantidadeReservada",
                            "NomeProduto",
                            "NomeComposto",
                            "CodigoBarras",
                            "Classe",
                            "CodigoItem"
                            
                            
                            
                        ]
                    )
                except ET.ParseError as e:
                    logging.warning("Error processing row: %s", e)
                    continue
                

                if dataVenda:
                    try:
                        dataVenda = datetime.datetime.strptime(dataVenda, '%d%m%Y %H:%M:%S.%f').strftime('%d/%m/%Y')
                    except ValueError as e:
                        logging.warning("Error processing date: %s", e)
                
                    
                    
                    
                             
               
                    
                
                    
                    
                

                
                        # Primary key value does not exist, insert a new row
                    insert_new_row(cursor, codigoPedidoAbacos, numeroDoPedido, protocoloPedido, comercializacao, grupoComercializacao, codigoUnidadeNegocio, codigoCliente, valorPedido, valorFrete, valorEncargos, valorDesconto, dataVenda, codigoTransportadora, transportadora, servicoEntrega, transportadoraCNPJ, canal, subCanal, destCep, destMunicipio, destEstado, codigoProdutoAbacos, codigoProduto, precoUnitarioLiquido, precoUnitarioBruto, quantidadeReservada, nomeProduto, nomeComposto, codigoBarras, classe, codigoItem)
                    logging.info('New row ITEM inserted for CodigoItem: %s', codigoItem)
                    logging.info("Time: " + datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"))
                    
                    



                connection.commit()
                element.clear()

    except Exception as e:
        logging.error('An error with occurred: %s', e)
        pass

        
        

        
        
        


def insert_new_row(cursor, codigoPedidoAbacos, numeroDoPedido, protocoloPedido, comercializacao, grupoComercializacao, codigoUnidadeNegocio, codigoCliente, valorPedido, valorFrete, valorEncargos, valorDesconto, dataVenda, codigoTransportadora, transportadora, servicoEntrega, transportadoraCNPJ, canal, subCanal, destCep, destMunicipio, destEstado, codigoProdutoAbacos, codigoProduto, precoUnitarioLiquido, precoUnitarioBruto, quantidadeReservada, nomeProduto, nomeComposto, codigoBarras, classe, codigoItem):
    
    if codigoItem is not None:
       cursor.execute('INSERT INTO pedidosTeste ([CodigoPedidoAbacos], [NumeroDoPedido], [ProtocoloPedido], [Comercializacao], [GrupoComercializacao], [CodigoUnidadeNegocio], [CodigoCliente], [ValorPedido], [ValorFrete], [ValorEncargos], [ValorDesconto], [DataVenda], [CodigoTransportadora], [Transportadora], [ServicoEntrega], [TransportadoraCNPJ], [Canal], [SubCanal], [DestCep], [DestMunicipio], [DestEstado], [CodigoProdutoAbacos], [CodigoProduto], [PrecoUnitarioLiquido], [PrecoUnitarioBruto], [QuantidadeReservada], [NomeProduto], [NomeComposto], [CodigoBarras], [Classe], [CodigoItem]) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', 
        (codigoPedidoAbacos, numeroDoPedido, protocoloPedido, comercializacao, grupoComercializacao, codigoUnidadeNegocio, codigoCliente, valorPedido, valorFrete, valorEncargos, valorDesconto, dataVenda, codigoTransportadora, transportadora, servicoEntrega, transportadoraCNPJ, canal, subCanal, destCep, destMunicipio, destEstado, codigoProdutoAbacos, codigoProduto, precoUnitarioLiquido, precoUnitarioBruto, quantidadeReservada, nomeProduto, nomeComposto, codigoBarras, classe, codigoItem))
    else:
        logging.warning("CodigoItem is None. Skipping row insertion.")

I have tried this way, but still getting one Item:

def handle_soap_request(url: str, headers: dict, body: str, db_connection_string: str) -> None: try: response = requests.post(url, data=body, headers=headers) response_content = response.content.decode("utf-8") response_content = response_content.replace('�', '')

    xml_io = StringIO(response_content)
    
    
    

    for event, element in ET.iterparse(xml_io, events=("start", "end")):
        if event == "start" and element.tag.endswith("DadosPedidosDisponiveisWeb"):
            try:
                namespace = "{http://www.kplsolucoes.com.br/ABACOSWebService}"
                codigoPedidoAbacos = element.findtext(f".//{namespace}CodigoPedidoAbacos")
                numeroDoPedido = element.findtext(f".//{namespace}NumeroDoPedido")
                codigoItem = element.findtext(f".//{namespace}CodigoItem")
                protocoloPedido = element.findtext(f".//{namespace}ProtocoloPedido")
                # Continue processing the data...
            except ET.ParseError as e:
                logging.warning("Error processing row: %s", e)
                continue
15
  • 1
    "it's working with the data in first row (or parent nodes) but when I try to get data inside (child nodes) with two or more data, just get one." - please show us your code. See also minimal reproducible example. Commented Jan 4, 2024 at 11:58
  • Thanks for answer me @mzjn! Sorry, but how can i send here my code? Button Answer my Question? Commented Jan 4, 2024 at 12:05
  • @MarcosRibeiro edit your question and put the code there (with correct formatting) Commented Jan 4, 2024 at 12:06
  • I did it right? Commented Jan 4, 2024 at 12:15
  • Your code has a default namespace : <PedidosDisponiveisResponse xmlns="http:..."> Commented Jan 4, 2024 at 12:47

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.