Pythonを使用してXMLファイルを編集しようとしています。タグ内のキーワードを見つけて置き換えたいです。過去に、同僚がテンプレートXMLファイルをセットアップし、「検索と置換」プログラムを使用してこれらのキーワードを置換していました。 pythonを使用して、これらのキーワードを見つけて値に置き換えます。Elementtreeモジュールを教えてきましたが、検索と置き換えを試みるのに問題があります。 XMLファイルのsnid-bit。%で囲まれた変数がいくつかあります(つまり、%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>
基礎:
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'
また、 documentation 、特にを読んでください。 XPath ノード検索のサポート。
%
で囲まれたビットを単に置き換えたい場合、これは実際には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)
Justeはファイルを1行ずつ読み取り、置き換えます。
for line in open(template_file_name,'r'):
output_line = line
output_line = string.replace(output_line, placeholder, value)
print output_line