Я пытаюсь изучить Python, написав скрипт, который будет извлекать данные из нескольких записей в файле XML. Мне удалось найти ответы на большинство моих вопросов с помощью поиска в Интернете, но я не нашел способа определить, содержит ли тег XML данные перед вызовом getElementsByTagName("tagname"). Используется метод [0].firstChild.data, и при отсутствии данных выдается ошибка AttributeError. Я понимаю, что мог бы написать свой код с попыткой обработать AttributeError, но я бы предпочел знать, что тег пуст, прежде чем пытаться извлечь данные, а не обрабатывать исключение. Вот пример файла XML, который содержит две записи: одну с данными в тегах и одну с пустым тегом.
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<records>
<rec>
<name>ZYSRQPO</name>
<state>Washington</state>
<country>United States</country>
</rec>
<rec>
<name>ZYXWVUT</name>
<state></state>
<country>Mexico</country>
</rec>
</records>
Вот пример кода, который я мог бы использовать для извлечения данных:
from xml.dom import minidom
import sys
mydoc = minidom.parse('mydataFile.xml')
records = mydoc.getElementsByTagName("rec")
for rec in records:
try:
name = rec.getElementsByTagName("name")[0].firstChild.data
state = rec.getElementsByTagName("state")[0].firstChild.data
country = rec.getElementsByTagName("country")[0].firstChild.data
print('{}\t{}\t{}'.format(name, state, country))
except (AttributeError):
print('AttributeError encountered in record {}'.format(name), file=sys.stderr)
continue
При обработке этого файла никакая информация для записи с именем ZYXWVUT не будет напечатана, за исключением того, что возникло исключение. Я хотел бы иметь нулевое значение для используемого имени состояния и остальной информации, напечатанной об этой записи. Есть ли метод, который можно использовать для выполнения того, что я хочу, чтобы я мог использовать оператор if, чтобы определить, не содержит ли тег данных, прежде чем использовать getElementsByTagName и столкнуться с ошибкой, когда данные не найдены?