it-swarm.com.de

Werte in XML mit Python suchen und ersetzen

Ich möchte XML-Dateien mit Python bearbeiten. Ich möchte Schlüsselwörter in den Tags finden und ersetzen. In der Vergangenheit hatte ein Mitarbeiter XML-Vorlagendateien eingerichtet und diese "Schlüsselwörter" durch ein "Suchen und Ersetzen" -Programm ersetzt. Ich möchte Python verwenden, um diese Schlüsselwörter zu finden und durch Werte zu ersetzen. Ich habe mir das Elementtree-Modul selbst beigebracht, aber ich habe Probleme beim Suchen und Ersetzen. Ich habe ein Snid-Bit meiner XML-Datei angehängt. Sie werden einige Variablen sehen, die von% umgeben sind (zB% SITEDESCR%). Dies sind die Wörter, die ich ersetzen und die XML in einer neuen Datei speichern möchte. Jede Hilfe oder Anregung wäre toll.

Danke, 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>
22
Mike

Die Grundlagen:

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)

Sie können den Pfad verkürzen, wenn der Tag-Name eindeutig ist. Diese Syntax findet den ersten Knoten auf einer beliebigen Tiefenebene im Baum.

tree.find('.//begdate').text = '1/1/2011'
tree.find('.//enddate').text = '1/1/2011'

Lesen Sie auch die Dokumentation , esp. die XPath - Unterstützung zum Lokalisieren von Knoten.

39
Mark Tolonen

Wenn Sie nur die in % enthaltenen Bits ersetzen möchten, handelt es sich nicht wirklich um ein XML-Problem. Mit regex geht das ganz einfach:

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)
5
Ismail Badawi

Juste hat die Datei Zeile für Zeile gelesen und ersetzt:

for line in open(template_file_name,'r'):
  output_line = line
  output_line = string.replace(output_line, placeholder, value)
  print output_line 
0
Rostislav Matl