首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Python查找和替换XML中的值

使用Python查找和替换XML中的值
EN

Stack Overflow用户
提问于 2011-06-30 00:18:35
回答 4查看 90.4K关注 0票数 41

我希望使用python编辑XML文件。我想查找和替换标签中的关键字。在过去,同事建立了模板XML文件,并使用“查找和替换”程序来替换这些关键字。我想使用python查找这些关键字并将其替换为值。我一直在自学Elementtree模块,但我在尝试查找和替换时遇到了麻烦。我附上了我的XML文件的snid位。您将看到一些由%(例如%SITEDESCR%)包围的变量,这些是我想要替换的单词,然后将XML保存到一个新文件中。任何帮助或建议都是很棒的。

谢谢,迈克

代码语言:javascript
复制
<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>
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-30 00:33:58

基础知识:

代码语言:javascript
复制
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)

如果标记名称是唯一的,则可以缩短路径。此语法查找树中任意深度级别的第一个节点。

代码语言:javascript
复制
tree.find('.//begdate').text = '1/1/2011'
tree.find('.//enddate').text = '1/1/2011'

此外,请阅读documentation,特别是用于定位节点的XPath支持。

票数 69
EN

Stack Overflow用户

发布于 2011-06-30 00:25:00

如果您只想替换包含在%中的位,那么这实际上不是一个XML问题。使用regex可以很容易地做到这一点:

代码语言:javascript
复制
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)
票数 7
EN

Stack Overflow用户

发布于 2011-06-30 00:25:51

要替换占位符,您只需逐行读取文件并替换:

代码语言:javascript
复制
for line in open(template_file_name,'r'):
  output_line = line
  output_line = string.replace(output_line, placeholder, value)
  print output_line 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6523886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档