私はPython Beautiful Soupを使用してXMLファイルを解析し、特定のタグを削除して別のファイルに書き込みます。ただし、Soup.pretifyを使用すると、他のXML名前空間と属性名が変更されます。
f = open('new.xml',"w"); f.write(soup.pretify(formatter="xml"));
以下の例のように変更します。
元の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.pretifyで作成された新しい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.ElementTree
XMLデータを解析して生成するためのシンプルで効率的なAPIを実装する基本モジュールの使用を検討してください。より速く、より良い、より簡単です。Pythonのような。
を使用して特定の要素を削除できます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
ループを使用して複数の類似要素を編集することもできます。