我正在尝试通过用正确的值替换标签属性来清理 XML 文件。
当我在下面运行我的代码时,标签属性被更新但仅在元素树标签对象中,XML 文件没有被更新/保存。
有没有办法在 ET.iterparse 中更新/保存对 XML 对象所做的更改?在我更改了循环中的所有标签属性值后,有没有办法更新文件?
当我在更改前后打印出 tag.attrib['v'] 时,它会正确更新为正确的值。但是我保存的 XML 文件没有反映这些更改。
我发现的所有解决方案都没有使用 ET.iterparse 方法。我正在处理一个相当大的文件,并希望保持我对 ET.iterparse 的使用。
使用:
- 蟒蛇 2.7
- xml.etree.cElementTree
谢谢。
def writeClean(self, cleaned_streets):
'''
Get cleaned streets mapping dictionary and use that dictionary to find
and replace all bad street name tag attributes within XML file.
Iterate through XML file to find all bad instances of tag attribute
street names, and replace with correct mapping value from cleaned_streets
mapping dictionary.
'''
with open(self.getSampleFile(), 'r+') as f:
for event, elem in ET.iterparse(f, events=('start',)):
if elem.tag == 'node' or elem.tag == 'way':
for tag in elem.iter('tag'):
if self.isStreetName(tag):
street = tag.attrib['v']
if street in cleaned_streets.keys():
tag.attrib['v'] = cleaned_streets[street]