J'essaie d'accéder facilement aux valeurs d'un fichier xml.
<artikelen>
<artikel nummer="121">
<code>ABC123</code>
<naam>Highlight pen</naam>
<voorraad>231</voorraad>
<prijs>0.56</prijs>
</artikel>
<artikel nummer="123">
<code>PQR678</code>
<naam>Nietmachine</naam>
<voorraad>587</voorraad>
<prijs>9.99</prijs>
</artikel>
..... etc
Si je veux accéder à la valeur ABC123, comment l'obtenir?
import xmltodict
with open('8_1.html') as fd:
doc = xmltodict.parse(fd.read())
print(doc[fd]['code'])
En utilisant votre exemple:
import xmltodict
with open('artikelen.xml') as fd:
doc = xmltodict.parse(fd.read())
Si vous examinez doc
, vous verrez que c'est un OrderedDict
, trié par tag:
>>> doc
OrderedDict([('artikelen',
OrderedDict([('artikel',
[OrderedDict([('@nummer', '121'),
('code', 'ABC123'),
('naam', 'Highlight pen'),
('voorraad', '231'),
('prijs', '0.56')]),
OrderedDict([('@nummer', '123'),
('code', 'PQR678'),
('naam', 'Nietmachine'),
('voorraad', '587'),
('prijs', '9.99')])])]))])
Le nœud racine est appelé artikelen
, et il y a un sous-nœud artikel
qui est une liste d'objets OrderedDict
, donc si vous voulez le code
pour chaque article, vous feriez:
codes = []
for artikel in doc['artikelen']['artikel']:
codes.append(artikel['code'])
# >>> codes
# ['ABC123', 'PQR678']
Si vous souhaitez spécifiquement le code
uniquement lorsque nummer
est 121
, vous pouvez faire ceci:
code = None
for artikel in doc['artikelen']['artikel']:
if artikel['@nummer'] == '121':
code = artikel['code']
break
Cela dit, si vous analysez des documents XML et souhaitez rechercher une valeur spécifique comme celle-ci, j'envisagerais d'utiliser expressions XPath , qui sont prises en charge par ElementTree
.
Ceci utilise xml.etree Vous pouvez essayer ceci:
for artikelobj in root.findall('artikel'):
print artikelobj.find('code')
si vous voulez extraire un code spécifique basé sur l'attribut 'nummer' d'artikel, alors vous pouvez essayer ceci:
for artikelobj in root.findall('artikel'):
if artikel.get('nummer') == 121:
print artikelobj.find('code')
cela n'imprimera que le code souhaité.