【发布时间】:2018-02-12 20:58:38
【问题描述】:
我正在尝试使用 LXML 创建一个 XML 文件。到目前为止,我...
from lxml import etree
def exportAsXML(self, filename):
fields = [
('Realm', self.Realm),
('ActiveState', self.ActiveState),
('Name', self.Name),
('Type', self.Type),
('Level', self.Level),
('Quality', self.Quality),
('Bonus', self.Bonus),
('AFDPS', self.AFDPS),
('Speed', self.Speed),
('Origin', self.Origin),
('DamageType', self.DamageType),
('LeftHand', self.LeftHand),
('Requirement', self.Requirement),
('Notes', self.Notes,)
]
root = etree.Element('Item')
for key, value in fields:
if value != '':
etree.SubElement(root, key).text = value
document = open(filename, 'w')
document.write(etree.tostring(root, pretty_print = True))
document.close()
这导致TypeError: must be str, not bytes,但我不明白发生了什么。我假设使用 etree.tostring 将 etree 对象转换为字符串,但似乎并非如此。有什么想法吗?
** 更新 **
我要做的是创建一个有效的 XML 文件,该文件使用 LXML 进行整齐格式化并包含一个 DTD(尚未实现)。我已经在我的应用程序的其他领域使用了 LXML,所以我想我会继续使用它。我正在使用 Python 3。
** 更新 2 **
控制台
b'<Item><Realm>All</Realm><ActiveState>Dropped</ActiveState><Name>Band</Name><Type>Wrist</Type><Level>50</Level><Quality>100</Quality><Bonus>35</Bonus><Origin>Quest</Origin></Item>'
文件
<Item><Realm>All</Realm><ActiveState>Dropped</ActiveState><Name>Band</Name><Type>Wrist</Type><Level>50</Level><Quality>100</Quality><Bonus>35</Bonus><Origin>Quest</Origin></Item>
【问题讨论】:
-
试试
etree.SubElement(root, key.decode('utf-8')).text = str(value, 'utf-8') -
@sKwa 抛出一个新异常:
TypeError: decoding str is not supported -
所以尝试将
str(value, 'utf-8')修改为str(value)。 -
@sKwa 试过了,没有骰子。和以前一样的例外。不知道我在这里缺少什么。我已经梳理了文档,并查看了其他示例,但仍然无法弄清楚。
-
上线失败-
etree.tostring(...)?
标签: python xml python-3.x lxml