Я пытаюсь прочитать файл XML, чтобы обновить версию программного обеспечения. В частности, файл XML содержит набор инкрементных обновлений, для которых могут потребоваться обновления базы данных в виде запросов SQL. Проблема в том, что я недостаточно знаком с чтением файлов XML, чтобы выяснить, как заставить это работать должным образом. Ниже приведен пример файла XML и кода Python (2.7), который я использую, чтобы попытаться прочитать его.
По сути, код python будет проверять версию @release и, если она больше, чем существующая версия программного обеспечения / базы данных, запустить код SQL. (Я могу легко добавить код для выполнения запроса, когда узнаю, как получить строку SQL в переменную.)
Кто-нибудь может дать мне несколько советов, где я могу ошибаться?
<?xml version="1.0"?>
<UNITNAME>
<!--Version Release-->
<databaseversion>1.0</databaseversion>
<softwareversion>2.0</softwareversion>
<released>2018-11-07</released>
<!--Database Upgrade Queries-->
<Database>
<version release="1.0">
<sql>UPDATE `system_defaults` SET `default_value`=1.0 WHERE `default_name`='DATABASEVERSION';</sql>
<sql>UPDATE `system_defaults` SET `default_value`=1.0 WHERE `default_name`='SOFTWAREVERSION';</sql>
</version>
<version release="2.0">
<sql>UPDATE `system_defaults` SET `default_value`=2.0 WHERE `default_name`='DATABASEVERSION';</sql>
<sql>UPDATE `system_defaults` SET `default_value`=2.0 WHERE `default_name`='SOFTWAREVERSION';</sql>
</version>
</Database>
</UNITNAME>
И код Python: переменная 'f', конечно, является местоположением файла urlopen в интернете (и он отлично загружается).
data=f.read()
f.close()
data=xmltodict.parse(data)
if isinstance(data, dict):
for k0, v0 in data["EM83D"]["Database"].iteritems():
#print k0, v0
if isinstance(v0, (list, dict)):
#print v0
for k1, v1 in v0.iteritems():
#print k1, v1
if isinstance(v1, (list, dict)):
print v1
for k2, v2 in v1.iteritems():
print k2, v2['#text']