使用Python在XML中查找和替换值

46 投票
4 回答
112995 浏览
提问于 2025-04-16 20:32

我想用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'

另外,可以看看文档,特别是关于XPath的部分,它可以帮助你找到节点。

撰写回答