在Python中自动使用ElementTree的正确方法是什么?

时间:2012-12-28 14:59:36

标签: python xml

我正在使用Python生成一些其他设备使用的XML文件。我有一个有效的解决方案,但我正在努力改进它。 XML必须包含的内容之一是日程安排。以下是星期一的条目在XML中应该是什么样的。

<Monday open="08:00" close="17:00" />

我在Python中使用ElementTree生成它没有任何问题,但是现在我每天都遇到一行代码。所以我的Python代码片段如下所示:

SubElement(schedule, 'Monday', open='08:00', close='17:00')
SubElement(schedule, 'Tuesday', open='08:00', close='17:00')
.
.
.
SubElement(schedule, 'Sunday', open='08:00', close='17:00')

XML文件最终将包含多个日程表,并且输入所有这些内容似乎是不必要的重复。而不是这个我想创建一个迭代列表的函数来构建传递给SubElement的参数。作为该函数的一部分,我创建了这个字符串来替换我的SubElement调用中的时间。

"open=" + "\'08:00\'" + ", " + "close=" + "\'17:00\'"

如果我将其打印出来,它看起来与我传递给SubElement时的内容完全相同。但是,当我尝试运行脚本时,它显然与我得到以下错误不同。

File "C:\Python27\lib\xml\etree\ElementTree.py", line 528, in SubElement
   attrib = attrib.copy()
AttributeError: 'str' object has no attribute 'copy'

我查看了SubElement代码,似乎在期待一本字典。然而,当我输入很长一段时间的东西时,我似乎没有提供字典作为输入,所以我不明白为什么函数应该接受该输入而不是出现的字符串对我来说是等价的。有什么方法可以做我想做的事情,还是我坚持使用大量重复的代码?

1 个答案:

答案 0 :(得分:1)

您应该将属性字典而不是“属性字符串”传递给SubElement,例如:

SubElement(schedule, 'Sunday', {'open': '08:00', 'close': '17:00'})

times = {'open': '08:00', 'close': '17:00'}
SubElement(schedule, 'Sunday', times)