使用Python在XML中查找和替换值
我想用Python来编辑XML文件。我想在标签中找到一些关键词并替换掉它们。以前有个同事设置了一些模板XML文件,并使用一个“查找和替换”的程序来替换这些关键词。我想用Python来找到这些关键词,并用新的值替换掉它们。我一直在自学Elementtree这个模块,但在查找和替换时遇到了一些困难。我附上了一小段我的XML文件。你会看到一些变量被%符号包围(比如%SITEDESCR%),这些就是我想替换的词,然后把修改后的XML保存到一个新文件里。如果有人能提供帮助或建议,那就太好了。
谢谢,
Mike
<metadata>
<idinfo>
<citation>
<citeinfo>
<origin>My Company</origin>
<pubdate>05/04/2009</pubdate>
<title>POLYGONS</title>
<geoform>vector digital data</geoform>
<onlink>\\C$\ArcGISDevelopment\Geodatabase\PDA_STD_05_25_2009.gdb</onlink>
</citeinfo>
</citation>
<descript>
<abstract>This dataset represents the mapped polygons developed from the field data for the %SITEDESCR%.</abstract>
<purpose>This dataset was created to accompany some stuff.</purpose>
</descript>
<timeperd>
<timeinfo>
<rngdates>
<begdate>%begdate%</begdate>
<begtime>unknown</begtime>
<enddate>%enddate%</enddate>
<endtime>unknown</endtime>
</rngdates>
</timeinfo>
<current>ground condition</current>
</timeperd>
4 个回答
0
要替换这些占位符,你只需要逐行读取文件,然后进行替换:
for line in open(template_file_name,'r'):
output_line = line
output_line = string.replace(output_line, placeholder, value)
print output_line
8
如果你只是想替换掉被%
包围的部分,那这其实不是一个XML的问题。你可以很简单地用正则表达式来做到这一点:
import re
xmlstring = open('myxmldocument.xml', 'r').read()
substitutions = {'SITEDESCR': 'myvalue', ...}
pattern = re.compile(r'%([^%]+)%')
xmlstring = re.sub(pattern, lambda m: substitutions[m.group(1)], xmlstring)
80
基础知识:
from xml.etree import ElementTree as et
tree = et.parse(datafile)
tree.find('idinfo/timeperd/timeinfo/rngdates/begdate').text = '1/1/2011'
tree.find('idinfo/timeperd/timeinfo/rngdates/enddate').text = '1/1/2011'
tree.write(datafile)
如果标签名是唯一的,你可以简化路径。这种写法可以在树的任何深度层级找到第一个节点。
tree.find('.//begdate').text = '1/1/2011'
tree.find('.//enddate').text = '1/1/2011'