Parsing XML to get all elem.tag: elem.text pairs
XPath support fetching parent element https://docs.python.org/2/library/xml.etree.elementtree.html#supported-xpath-syntax. Let's try to find name element and get parent of this element:

&gt;&gt;&gt; [x for x in tree.findall('.//name/..')]
[&lt;Element 'diag' at 0x7f9c8cece278&gt;,
 &lt;Element 'diag' at 0x7f9c85a84908&gt;,
 &lt;Element 'diag' at 0x7f9c85a93f98&gt;,
 &lt;Element 'diag' at 0x7f9c85a8f188&gt;]


When we have parent element, we can get name and desc elements:

&gt;&gt;&gt; [(x.find('name'), x.find('desc')) for x in tree.findall('.//name/..')]
[(&lt;Element 'name' at 0x7f9c875ba7c8&gt;, &lt;Element 'desc' at 0x7f9c8cedfe58&gt;),
 (&lt;Element 'name' at 0x7f9c85a84958&gt;, &lt;Element 'desc' at 0x7f9c85a84f98&gt;),
 (&lt;Element 'name' at 0x7f9c85a8f048&gt;, &lt;Element 'desc' at 0x7f9c85a8f098&gt;),
 (&lt;Element 'name' at 0x7f9c85a8f1d8&gt;, &lt;Element 'desc' at 0x7f9c85a8f228&gt;)]


And finally:

&gt;&gt;&gt; [(x.find('name').text, x.find('desc').text) for x in tree.findall('.//name/..')]
[('A00', 'Cholera'),
 ('A00.0', 'Cholera due to Vibrio cholerae 01, biovar cholerae'), 
 ('A00.1', 'Cholera due to Vibrio cholerae 01, biovar eltor'), 
 ('A00.9', 'Cholera, unspecified')]