![XML修改并写入文件 beautiful soup](https://linux22.com/image/36341/XML%E4%BF%AE%E6%94%B9%E5%B9%B6%E5%86%99%E5%85%A5%E6%96%87%E4%BB%B6%20beautiful%20soup.png)
我正在使用 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 内容不变?请建议。
答案1
考虑使用本机xml.etree.ElementTree
模块,它实现了一个简单而高效的 API 来解析和创建 XML 数据。它更快、更好、更容易、蟒蛇式的。
您可以使用 删除特定元素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
循环来编辑多个相似的元素。