Ler XML

100 views
Skip to first unread message

Rafael Silva

unread,
Jul 25, 2018, 3:02:06 PM7/25/18
to Python Brasil
Boa tarde a todos,
Estou tentando ler esse XML usando o ElementTree
mas não sei como acessar as tag <CNPJ>,<cStat>,<xMotivo>
tentei usar varios exemplos que achei na internet mas sem sucesso,
alguem poderia me ajudar?

<soap:Body>
<retConsCad xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00">
<infCons>
<verAplic>SP_NFE_PL009_V4</verAplic>
<cStat>111</cStat>
<xMotivo>Consulta cadastro com uma ocorrência</xMotivo>
<UF>SP</UF>
<CNPJ>11111111111</CNPJ>
<dhCons>2018-07-25T15:54:07-03:00</dhCons>
<cUF>35</cUF>
<infCad>
<IE>11111111111</IE>
<CNPJ>1111111111111</CNPJ>
<UF>SP</UF>
<cSit>1</cSit>
<indCredNFe>1</indCredNFe>
<indCredCTe>4</indCredCTe>
<xNome>teste</xNome>
<xRegApur>SIMPLES NACIONAL</xRegApur>
<CNAE>22222</CNAE>
<dIniAtiv>1997-05-09</dIniAtiv>
<dUltSit>1997-05-09</dUltSit>
<ender>
<xLgr>RUA TESTE</xLgr>
<nro>123</nro>
<xBairro>CENTRO</xBairro>
<cMun>66666</cMun>
<xMun>POA</xMun>
<CEP>0454000</CEP>
</ender>
</infCad>
</infCons>
</retConsCad>
</nfeResultMsg>
</soap:Body>
</soap:Envelope>

Fabio C. Barrionuevo da Luz

unread,
Jul 25, 2018, 3:34:32 PM7/25/18
to python...@googlegroups.com
se você tiver conectando a uma API soap, talvez o zeep possa ajudar.

exemplo:

https://gist.github.com/luzfcb/2ec92b23c756032f2e1c2076e50f788b


import zeep  # http://python-zeep.readthedocs.io/en/master/
from zeep.helpers import serialize_object
from requests import Session # http://docs.python-requests.org/en/master/


# ajuda a customizar o cabeçalho da requisicao
class Transport(zeep.transports.Transport):
def __init__(self, cache=None, timeout=300, operation_timeout=None, session=None):
super(Transport, self).__init__(
cache=cache, timeout=timeout, operation_timeout=operation_timeout, session=session
)
self.session.headers['Content-Type'] = 'text/xml; charset=utf-8'
self.session.headers['User-Agent'] = '{} ({})'.format(
'NomeDoTeuSistema',
self.session.headers['User-Agent']
)


session = Session()

# desativa verificacao certificado SSL
# so use isso se for estritamente necessario
# session.verify = False

transport = Transport(session=session)

url_webservice = 'url para o wsdl'

client = zeep.Client(wsdl=url_webservice, transport=transport)

parametros_do_service = {
'param1': 'blah',
'param2': 'blah',
}

response = client.service.nomeDoServiceWSDLQueVcEstaConsultando(**parametros_do_service)

dict_dados_recebidos = serialize_object(response)








--
--
------------------------------------
Grupo Python-Brasil
https://wiki.python.org.br/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasil+unsubscribe@googlegroups.com
---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.
Para postar nesse grupo, envie um e-mail para python...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/python-brasil/b8f4d3e6-b23c-4652-a4ce-c7492feb56cb%40googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--
Fábio C. Barrionuevo da Luz
Palmas - Tocantins - Brasil - América do Sul


Blog colaborativo sobre Python e tecnologias Relacionadas, mantido totalmente no https://github.com/pythonclub/pythonclub.github.io .

Todos são livres para publicar. É só fazer fork, escrever sua postagem e mandar o pull-request. Leia mais sobre como publicar em README.md e contributing.md.
Regra básica de postagem:
"Você" acha interessante? É útil para "você"? Pode ser utilizado com Python ou é útil para quem usa Python? Está esperando o que? Publica logo, que estou louco para ler...

Rafael Silva

unread,
Jul 25, 2018, 3:48:15 PM7/25/18
to python...@googlegroups.com
Eu consigo conectar a API soap normal oque eu não consigo é ler o xml
>> python-brasi...@googlegroups.com
>> ---
>> Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil"
>> dos Grupos do Google.
>> Para cancelar inscrição nesse grupo e parar de receber e-mails dele,
>> envie
>> um e-mail para python-brasi...@googlegroups.com.
>> Para postar nesse grupo, envie um e-mail para
>> python...@googlegroups.com.
>> Para ver essa discussão na Web, acesse https://groups.google.com/d/
>> msgid/python-brasil/b8f4d3e6-b23c-4652-a4ce-c7492feb56cb%
>> 40googlegroups.com
>> <https://groups.google.com/d/msgid/python-brasil/b8f4d3e6-b23c-4652-a4ce-c7492feb56cb%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> Para mais opções, acesse https://groups.google.com/d/optout.
>>
>
>
>
> --
> Fábio C. Barrionuevo da Luz
> Palmas - Tocantins - Brasil - América do Sul
>
> http://pythonclub.com.br/
>
> Blog colaborativo sobre Python e tecnologias Relacionadas, mantido
> totalmente no https://github.com/pythonclub/pythonclub.github.io .
>
> Todos são livres para publicar. É só fazer fork, escrever sua postagem e
> mandar o pull-request. Leia mais sobre como publicar em README.md e
> contributing.md.
> Regra básica de postagem:
> "Você" acha interessante? É útil para "você"? Pode ser utilizado com Python
> ou é útil para quem usa Python? Está esperando o que? Publica logo, que
> estou louco para ler...
>
> --
> --
> ------------------------------------
> Grupo Python-Brasil
> https://wiki.python.org.br/AntesDePerguntar
>
> <*> Para visitar o site do grupo na web, acesse:
> http://groups.google.com/group/python-brasil
>
> <*> Para sair deste grupo, envie um e-mail para:
> python-brasi...@googlegroups.com
> ---
> Você está recebendo esta mensagem porque se inscreveu no grupo "Python
> Brasil" dos Grupos do Google.
> Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie
> um e-mail para python-brasi...@googlegroups.com.
> Para postar neste grupo, envie um e-mail para
> python...@googlegroups.com.
> Para ver esta discussão na web, acesse
> https://groups.google.com/d/msgid/python-brasil/CAPVjvMZuqsU8V9wST5UuRCQmzsFDU6rdUYNdV%3D2K6D8zOdjNgQ%40mail.gmail.com.
> Para obter mais opções, acesse https://groups.google.com/d/optout.
>

Fabio C. Barrionuevo da Luz

unread,
Jul 25, 2018, 3:53:03 PM7/25/18
to python...@googlegroups.com
o ElementTree do lxml é muito cru. o zeep abstrai toda a complexidade de mexer com webservice soap para você,
e o serialize_object do zeep converte o response para um dict python que é fácil de mexer.

faça uma tentativa com o zeep.



>> ---
>> Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil"
>> dos Grupos do Google.
>> Para cancelar inscrição nesse grupo e parar de receber e-mails dele,
>> envie
> Você está recebendo esta mensagem porque se inscreveu no grupo "Python
> Brasil" dos Grupos do Google.
> Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie
> Para postar neste grupo, envie um e-mail para
> python...@googlegroups.com.
> Para ver esta discussão na web, acesse
> https://groups.google.com/d/msgid/python-brasil/CAPVjvMZuqsU8V9wST5UuRCQmzsFDU6rdUYNdV%3D2K6D8zOdjNgQ%40mail.gmail.com.
> Para obter mais opções, acesse https://groups.google.com/d/optout.
>

--
--
------------------------------------
Grupo Python-Brasil
https://wiki.python.org.br/AntesDePerguntar

<*> Para visitar o site do grupo na web, acesse:
    http://groups.google.com/group/python-brasil

<*> Para sair deste grupo, envie um e-mail para:
Você está recebendo esta mensagem porque se inscreveu no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.
Para postar neste grupo, envie um e-mail para python...@googlegroups.com.

Para obter mais opções, acesse https://groups.google.com/d/optout.

Linux - Junior Polegato

unread,
Jul 25, 2018, 3:56:00 PM7/25/18
to python...@googlegroups.com
Olá!

        Você pode pegar uma referência ou usar o meu PoleXML [1], tem a
função "importar" e aí pode acessar os elementos de forma simples, exemplo:

xml = PoleXML.importar(str_xml)
retorno = xml.Envelope.Body.nfeResultMsg.retConsCad
status = str(retorno.cStat)
motivo = str(retorno.xMotivo)
cnpj = str(retorno.CNPJ)

[1] https://github.com/JuniorPolegato/pole/blob/master/src/pole/PoleXML.py


--
[]'s

Junior Polegato

Rafael Silva

unread,
Jul 26, 2018, 8:24:40 AM7/26/18
to python...@googlegroups.com
Bom dia a todos, obrigado pela ajuda, consegui resolver da seguinte maneira:

from lxml import etree
import io

def parseXML(xmlFile):
f = open(xmlFile)
xml = f.read()
xml = xml.encode('ISO-8859-1')
f.close()
tree = etree.parse(io.BytesIO(xml))
context = etree.iterparse(io.BytesIO(xml))
for action, elem in context:
if not elem.text:
text = "None"
else:
text = elem.text
if elem.tag == '{http://www.portalfiscal.inf.br/nfe}CNPJ':
print (elem.tag + " => " + text )


parseXML('caminho xml')
> https://groups.google.com/d/msgid/python-brasil/5680a8f3-19bf-b8e8-a69d-21b44d6cc5e0%40juniorpolegato.com.br.
Reply all
Reply to author
Forward
0 new messages