我正在尝试读取 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']