XMLを修正してファイルへの書き込み美しいスープ

XMLを修正してファイルへの書き込み美しいスープ

私は Python beautiful soup を使用して XML ファイルを解析し、特定のタグを削除した後に別のファイルに書き込みます。ただし、soup.prettify を使用すると、他の XML 名前空間と属性名が変更されます。

f = open('new.xml',"w"); f.write(soup.prettify(formatter="xml")); f.close();

変更内容は以下のサンプルの通りです。

元の XML ファイル。

<draw:control text:anchor-type="paragraph" draw:z-index="1" draw:style-name="gr1" draw:text-style-name="P2" svg:width="2.805cm" svg:height="1.853cm" svg:x="3.602cm" svg:y="0.824cm" draw:control="control2"/>

soup.prettify から書き込まれた新しい XML ファイル。

  <draw:control draw:control="control2" draw:style-name="gr1" draw:text-style-name="P2" draw:z-index="1" svg:height="1.853cm" svg:width="2.805cm" svg:x="3.602cm" svg:y="0.824cm" text:anchor-type="paragraph"/>

prettify() に utf-8 を追加してみました。しかし、同じ問題です。検索に基づいて特定のタグを削除し、ファイル内の他のすべての XML コンテンツをそのまま維持する他の方法はありますか? 提案してください。

答え1

xml.etree.ElementTreeXMLデータの解析と作成のためのシンプルで効率的なAPIを実装したネイティブモジュールの使用を検討してください。より速く、より良く、より簡単で、パイソン

を使用して特定の要素を削除できますElement.remove()

基本的な例を挙げるここ

しかし、どうしても使いたいのであれば美しいスープlxmlネイティブpyモジュールの拡張バージョンを使用します)

# beautifulstonesoup for XML parsing
from BeautifulSoup import BeautifulStoneSoup 

xml_data = """
<draw:control text:anchor-type="paragraph" draw:z-index="1" draw:style-name="gr1" draw:text-style-name="P2" svg:width="2.805cm" svg:height="1.853cm" svg:x="3.602cm" svg:y="0.824cm" draw:control="control2"/>
"""
soup = BeautifulStoneSoup(xml_data)
print soup.prettify()
soup.find(<your tag/element).replaceWith(<whateveryouwant>)

forループを使用して複数の類似要素を編集することもできます。

関連情報