私はこのようなxmlファイルを持っています:
<lala>
<blabla>
<qweqwe>test</qweqwe>
</blabla>
</lala>
それを開いて、qweqweのtestを別の値(たとえばnewtest)に変更する必要があります。その後、新しいxmlファイルのように保存する必要があります。Pythonを使用して最善の方法でそれを行う方法を教えてください。
使用をお勧めしlmxl
ます-簡単な例は次のとおりです。
from lxml import etree as et
>>> xml="""<lala>
<blabla>
<qweqwe>test</qweqwe>
</blabla>
</lala>
"""
>>> test = et.fromstring(xml)
>>> for i in test.xpath('//qweqwe'):
i.text = 'adsfadfasdfasdfasdf' # put logic here
>>> print et.tostring(test) # write this to file instead
<lala>
<blabla>
<qweqwe>adsfadfasdfasdfasdf</qweqwe>
</blabla>
</lala>
ここにある他のすべてのXMLの質問と同様に、Pythonについては次を参照してください。lxml
リンク: http: //lxml.de/
test のすべてのインスタンスを変更しようとしている場合は、ファイルを開いて一致する文字列を探すだけです
それで
result = []
f = open("xml file")
for i in f:
if i == "<qweqwe>test</qweqwe>":
i = "<qweqwe>My change</qweqwe>"
result.append(i)
f.close()
f = open("new xml file")
for x in result:
f.writeline(x)
これは、xml 要素の値の変更に関する質問ですが、代わりに提案された回答を使用して xml 要素のテキストを変更することは、それほど難しくありません。
このようなタスクについては、ライブラリに組み込まれているminidomが迅速かつ簡単であることがわかりました。ただし、速度とメモリ使用量に関して、他のさまざまなライブラリと広範囲に比較したとは言えません。
私はそれが軽量で、開発が速く、Python 2.0以降に存在することが好きです
同じことをしようとしているがエンコーディングに問題がある人にとって、これは .xml を UTF-16 エンコーディングに変更する一般化されたソリューションでした。
Python 2.7 で、「a」が python の「作業フォルダー」にあるフォルダー「a」にある「b.xml」という名前の .xml ファイルを変更して機能しました。Python 2.7以外でさらに使用する際に(私にとっては)エンコードエラーを発生させることなく、新しい変更されたファイルをフォルダー「a」に「c.xml」として出力します。
file = io.open('a/b.xml', 'r', encoding='utf-16')
lines = file.readlines()
outFile = open('a/c.xml', 'w')
for line in lines[0:len(lines)]:
#replace author:
pattern = '<Author>'
subst = ' <Author>' + domain + '\\' + user_name + '</Author>'
if pattern in line:
line = subst
print line
outFile.writelines(line)