How can I use xmltodict to get items out of an XML file?
python, xml, xmltodict
Solution
Using your example:
import xmltodict
with open('artikelen.xml') as fd:
doc = xmltodict.parse(fd.read())
If you examine `doc`, you'll see it's an `OrderedDict`, ordered by 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')])])]))])
The root node is called `artikelen`, and there is a subnode `artikel` which is a list of `OrderedDict` objects, so if you want the `code` for every article, you would do:
codes = []
for artikel in doc['artikelen']['artikel']:
codes.append(artikel['code'])
# >>> codes
# ['ABC123', 'PQR678']
If you specifically want the `code` only when `nummer` is `121`, you could do this:
code = None
for artikel in doc['artikelen']['artikel']:
if artikel['@nummer'] == '121':
code = artikel['code']
break
That said, if you're parsing XML documents and want to search for a specific value like that, I would consider using XPath expressions, which are supported by `ElementTree`.
Problem
I am trying to easily access values from an XML file like this: ``` <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 ``` How would I go about getting access to the value `ABC123`? ``` import xmltodict with open('8_1.html') as fd: doc = xmltodict.parse(fd.read()) print(doc[fd]['code']) ```