【发布时间】:2013-03-18 00:44:09
【问题描述】:
我目前正在尝试将逻辑应用于 XML 文件中的元素值。具体来说,我正在尝试将所有值编码为 UTF-8,同时不触及任何元素名称/属性本身。
这里是示例 XML:
<?xml version="1.0"?>
<sd_1>
<sd_2>
<sd_3>\311 is a fancy kind of E</sd_3>
</sd_2>
</sd_1>
目前我已经尝试了 3 种方法来实现这一点,但没有成功:
首先我尝试循环遍历每个元素,使用 .text 检索值并使用 .parse:
import xml.etree.ElementTree as ET
et = ET.parse('xml/test.xml')
for child in et.getroot():
for core in child:
core_value = str(core.text)
core.text = core_value.encode('utf-8')
et.write('output.xml')
这会导致 XML 文件的文本 \311 没有正确更改,它只是保持原样。
接下来我用 cElementTree 尝试了 .iterparse 无济于事:
import xml.etree.cElementTree as etree
xml_file_path = 'xml/test.xml'
with open(xml_file_path) as xml_file:
tree = etree.iterparse(xml_file)
for items in tree:
for item in items:
print item.text
etree.write('output1.xml')
这会导致:
"...print item.text\n', "AttributeError: 'str' object has no attribute 'text'..."
不知道我在那里做错了什么,我看到了多个具有相同排列的示例,但是当我打印没有 .text 的元素时,我看到开头的字符串值为“end”的元组,我认为这是导致此方法出现问题的原因。
如何正确地遍历我的元素,而不指定元素名称,例如.findall(),将逻辑应用于每个元素中包含的值,以便当我将 xml 写入文件时,它会保存程序迭代元素值时所做的更改?
【问题讨论】:
标签: python xml elementtree celementtree