変更したいタグを含む XML ドキュメントがあります。
...<version>1.0</version>...
これは XML ファイルの奥深くに埋め込まれていますが、Beautiful Soup を使用してその内容をコマンド ライン パラメーターに置き換えることに成功しています。
問題は、ツリーを変更した後、読み込んだファイルに書き戻す必要があることです。ただし、ドキュメントの元の書式を維持したいと考えています。私が使用する場合:
fileForWriting = open(myXmlFile, 'w')
fileForWriting.write(soup.prettify())
prettify()
呼び出しはフォーマットを壊し、私は次のようになります:
<version>
1.0
</version>
その単一のタグ テキストを置き換えながら、XML ドキュメントの元の書式を維持する方法はありますか?
注:単純に次のように使用します。
fileForWriting.write(str(soup))
テキストとタグを同じ行に保持しますが、読みやすくするために人間が追加したインデントと余分な改行を削除します。閉じますが、葉巻はありません。
リクエストにより、スクリプト全体:
from BeautifulSoup import BeautifulSoup as bs
import sys
xmlFile = sys.argv[1:][0]
version = sys.argv[1:][1]
fileForReading = open(xmlFile, 'r')
xmlString = fileForReading.read()
fileForReading.close()
soup = bs(xmlString)
soup.findAll('version')[1].contents[0].replaceWith(version)
fileForWriting = open(xmlFile, 'w')
fileForWriting.write(str(soup))
fileForWriting.close()
次に、スクリプトは次を使用して実行されます。
python myscript.py someFile.xml 1.2