我正在使用python2.6、ElementTree和SQLite3。我的脚本当前执行以下操作:
下面是我如何检索模式数据并将元素添加到XML中。我对SOFTWARE_
和TARGET_
表执行此操作。这是SOFTWARE_
表:
software_attributes = ["id", "functionalDesignationHardware", "hwfin", "identname", "partnumber",
"repfin", "targetHardwareID"]
software = db.cursor().execute("SELECT %s from SOFTWARE_" % ", ".join([i + "_" for i in software_attributes]))
software_Data = software.fetchall()
ID1 = db.cursor().execute("SELECT id_ from SOFTWARE_")
software_IDs = ID1.fetchall()
for sw in software_Data:
sw_node = ET.SubElement(root, "Software")
for s in range(1, len(software_attributes)):
sw_node.set(software_attributes[s], str(sw[s]))
更新:这是我的TARGET_
表的代码:
这就是我如何存储表中的信息,这些表的唯一目的是连接来自其他表的数据。SOFTWARE_TARGET_
表将SOFTWARE_
连接到TARGET_
。我把它的信息储存在字典里:
software_target = db.cursor().execute("SELECT SOFTWARE1, TARGET2 from SOFTWARE_TARGET_")
software_target_Data = software_target.fetchall()
# Map SOFTWARE1 to TARGET2
separated_st_Data = {}
for item in software_target_Data:
software1, target2 = item
try:
separated_st_Data[software1].append(target2)
except KeyError:
separated_st_Data[software1] = [target2]
到目前为止,我已经找到了如何将xml设置为以下格式:
<Software attribute="stuff" attribute2="Stuff"/>
<Software attribute="stuff" attribute2="Stuff"/>
<Target attribute="things" attribute2="Things"/>
但我需要的是以下格式:
<Software attribute="stuff" attribute2="Stuff"
<Target attribute="things" attribute2="Things"/>
<Target attribute="things" attribute2="Things"/>
</Software>
<Software attribute="stuff" attribute2="Stuff"/>
哪个Target
子元素位于哪个Software
元素之下,由SOFTWARE_TARGET_
表中的信息确定。我找到了如何遍历我的字典,比如:
depth=0
for k,v in sorted(separated_st_Data.items(),key=lambda x: x[0]):
if isinstance(v, dict):
print (" ")*depth + ("%s" % k)
walk_dict(v,depth+1)
else:
print (" ")*depth + "%s %s" % (k, v)
如何根据数据库表中的信息创建格式正确的XML文件(如尝试部分所述)?我创造了这本词典,以为我可以用它来达到这个目的——如果有必要,请告诉我。在
注意事项
This是我从SOFTWARE_TARGET_
表创建的字典的样子。键表示来自SOFTWARE_
的id_
模式,值表示来自TARGET_
的id_
模式。(如果我的术语听起来不符合要求,请告诉我-数据库有时会让我困惑)。在
喔,几乎忘了-下面是我在完成的Python脚本中使用的最终代码(当然,除了完整脚本的几个关键元素):
注意:在我最后的尝试中,我没有像本问题中最初假设的那样使用字典方法——我的最终方法对我的目的更有效。有关使用字典的方法的示例,请参阅此问题的选定答案。
在创建
Target
元素(这里的问题中没有给出代码)时,请确保将它们作为第一个参数附加到的sw_node
传递给它。在即:
而不是。。。在
^{pr2}$这种类型的代码的典型模式可能具有以下外观(大致上;需要一些测试,使用
pyformat
paramstyle为DB-API驱动程序编写,并且不能与其他模式一起工作):相关问题 更多 >
编程相关推荐