Xml

XML修改並寫入文件美湯

  • May 9, 2014

我正在使用 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"/>

我嘗試將 utf-8 添加到 prettify() 中。但是,同樣的問題。是否有任何其他方法可以根據搜尋刪除特定標籤並保持文件中的所有其他 XML 內容完好無損?請建議。

考慮使用本機xml.etree.ElementTree模組,該模組實現了用於解析和創建 XML 數據的簡單高效的 API。它更快,更好,更容易和pythonic

您可以使用 刪除特定元素Element.remove()

這裡給出了一個基本的例子。

但是如果你堅持使用BeautifulSoup(它使用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循環來編輯多個相似的元素。

引用自:https://unix.stackexchange.com/questions/128620