How can I check the existence of attributes and tags in XML before parsing?
If a tag doesn't exist, .find()
indeed returns None
. Simply test for that value:
for event in root.findall('event'):
party = event.find('party')
if party is None:
continue
parties = party.text
children = event.get('value')
You already use .get()
on event to test for the value
the attribute; it returns None
as well if the attribute does not exist.
Attributes are stored in the .attrib
dictionary, so you can use standard Python techniques to test for the attribute explicitly too:
if 'value' in event.attrib:
# value attribute is present.
Abhishek
HI i'm a Computer Science and Engineering student. I'm an ardent programmer and love building products.
Updated on July 09, 2022Comments
-
Abhishek almost 2 years
I'm parsing an XML file via Element Tree in python and and writing the content to a cpp file.
The content of children tags will be variant for different tags. For example first event tag has party tag as child but second event tag doesn't have.
-->How can I check whether a tag exists or not before parsing?
-->Children has value attribute in 1st event tag but not in second. How can I check whether an attribute exists or not before taking it's value.
--> Currently my code throws an error for non existing party tag and sets a "None" attribute value for the second children tag.
<main> <event> <party>Big</party> <children type="me" value="3"/> </event> <event> <children type="me"/> </event> </main>
Code:
import xml.etree.ElementTree as ET tree = ET.parse('party.xml') root = tree.getroot() for event in root.findall('event'): parties = event.find('party').text children = event.get('value')
I want to check the tags and then take their values.
-
Abhishek about 11 years@Martjin Pieters You mentioned if party is None: How will I write in Python if i wish to write something like -- If party!= None:
-
Martijn Pieters about 11 years@Abhishek:
if party is not None
. See python comparison operators. -
sebisnow over 7 yearsThanks for also mentioning how to check for attributes. Very good answer.