Skip to content

Instantly share code, notes, and snippets.

@rochacbruno
Last active August 29, 2015 13:56
Show Gist options
  • Save rochacbruno/8865304 to your computer and use it in GitHub Desktop.
Save rochacbruno/8865304 to your computer and use it in GitHub Desktop.
append item to xml with xmltodict
import xmltodict
secundario = """<Pessoa>
<Nome>rayane</Nome>
<Idade>20</Idade>
<Endereco>avenida1</Endereco>
<Cidade>bh</Cidade>
<CPF>111.111.111-11</CPF>
<E-mail>[email protected]</E-mail>
</Pessoa>"""
arquivo = """<Dados>
<Pessoa>
<Nome>rayane</Nome>
<Idade>20</Idade>
<Endereco>avenida1</Endereco>
<Cidade>bh</Cidade>
<CPF>111.111.111-11</CPF>
<E-mail>[email protected]</E-mail>
</Pessoa>
<Pessoa>
<Nome>rayane</Nome>
<Idade>20</Idade>
<Endereco>avenida1</Endereco>
<Cidade>bh</Cidade>
<CPF>111.111.111-11</CPF>
<E-mail>[email protected]</E-mail>
</Pessoa>
</Dados>"""
# parse de XML string para OrderedDicts
original = xmltodict.parse(arquivo)
novo = xmltodict.parse(secundario)
print original['Dados']['Pessoa']
""" #output
[OrderedDict([(u'Nome', u'rayane'), (u'Idade', u'20'), (u'Endereco', u'avenida1'), (u'Cidade', u'bh'), (u'CPF', u'111.111.111-11'), (u'E-mail', u'[email protected]')]), OrderedDict([(u'Nome', u'rayane'), (u'Idade', u'20'), (u'Endereco', u'avenida1'), (u'Cidade', u'bh'), (u'CPF', u'111.111.111-11'), (u'E-mail', u'[email protected]')])]
"""
# os tipos:
# O "novo" tem o nó 'Pessoa' como item único por ter apenas um elemento
type(novo['Pessoa'])
""" # output
collections.OrderedDict
"""
# O "original" tem o nó 'Pessoa' como uma lista de items por ter mais de um elemento
type(original['Dados']['Pessoa'])
""" $ output
list
"""
# a determinação dos tipos acima é de acordo com esta spec:
# http://www.xml.com/pub/a/2006/05/31/converting-between-xml-and-json.html
# adiciona o nó 'Pessoa' do novo a lista 'Pessoa' do original
original['Dados']['Pessoa'].append(novo['Pessoa'])
print original['Dados']['Pessoa']
""" #output
[OrderedDict([(u'Nome', u'rayane'), (u'Idade', u'20'), (u'Endereco', u'avenida1'), (u'Cidade', u'bh'), (u'CPF', u'111.111.111-11'), (u'E-mail', u'[email protected]')]), OrderedDict([(u'Nome', u'rayane'), (u'Idade', u'20'), (u'Endereco', u'avenida1'), (u'Cidade', u'bh'), (u'CPF', u'111.111.111-11'), (u'E-mail', u'[email protected]')]), OrderedDict([(u'Nome', u'rayane'), (u'Idade', u'20'), (u'Endereco', u'avenida1'), (u'Cidade', u'bh'), (u'CPF', u'111.111.111-11'), (u'E-mail', u'[email protected]')])]
"""
# convertendo de volta para xml
print xmltodict.unparse(original)
""" # output
<?xml version="1.0" encoding="utf-8"?>
<Dados>
<Pessoa>
<Nome>rayane</Nome><Idade>20</Idade><Endereco>avenida1</Endereco><Cidade>bh</Cidade><CPF>111.111.111-11</CPF><E-mail>[email protected]</E-mail>
</Pessoa>
<Pessoa>
<Nome>rayane</Nome><Idade>20</Idade><Endereco>avenida1</Endereco><Cidade>bh</Cidade><CPF>111.111.111-11</CPF><E-mail>[email protected]</E-mail>
</Pessoa>
<Pessoa>
<Nome>rayane</Nome><Idade>20</Idade><Endereco>avenida1</Endereco><Cidade>bh</Cidade><CPF>111.111.111-11</CPF><E-mail>[email protected]</E-mail>
</Pessoa>
</Dados>
"""
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment