Найти и заменить значения в XML с помощью Python
Я хочу редактировать XML файлы с помощью python. Я хочу найти и заменить ключевые слова в тегах. В прошлом сотрудник создал шаблонные XML файлы и использовал программу "найти и заменить" для замены этих ключевых слов. Я хочу использовать python для поиска и замены этих ключевых слов значениями. Я преподаю себе модуль Elementtree, но у меня возникают проблемы с поиском и заменой. Я прикрепил snid-бит моего 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>
Ответы
Ответ 1
Основы:
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)
Вы можете сократить путь, если имя тега уникально. Этот синтаксис находит первый node на любом уровне глубины в дереве.
tree.find('.//begdate').text = '1/1/2011'
tree.find('.//enddate').text = '1/1/2011'
Кроме того, прочитайте документацию, особенно. XPath поддержка поиска узлов.
Ответ 2
Если вы просто хотите заменить биты, заключенные в %
, это не проблема 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)
Ответ 3
Juste читает файл по строкам и заменяет:
for line in open(template_file_name,'r'):
output_line = line
output_line = string.replace(output_line, placeholder, value)
print output_line