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

Mik*_*ike 29 python xml replace find

我期待使用python编辑XML文件.我想找到并替换标签中的关键字.过去,同事已经设置了模板XML文件,并使用"查找和替换"程序来替换这些关键词.我想使用python来查找并用值替换这些关键字.我一直在教自己Elementtree模块,但是我在尝试查找和替换时遇到了麻烦.我附上了一个我的XML文件.您将看到一些由%包围的变量(即%SITEDESCR%)这些是我想要替换的单词,然后将XML保存到新文件中.任何帮助或建议都会很棒.

谢谢,迈克

<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>
Run Code Online (Sandbox Code Playgroud)

Mar*_*nen 52

基础:

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)
Run Code Online (Sandbox Code Playgroud)

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

tree.find('.//begdate').text = '1/1/2011'
tree.find('.//enddate').text = '1/1/2011'
Run Code Online (Sandbox Code Playgroud)

另外,请阅读文档,尤其是 在XPath的定位节点的支持.


Ism*_*awi 5

如果你只想替换附带的位%,那么这不是一个真正的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)
Run Code Online (Sandbox Code Playgroud)