Last active
August 29, 2015 13:56
-
-
Save rochacbruno/8865304 to your computer and use it in GitHub Desktop.
append item to xml with xmltodict
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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