XML修改并写入文件 beautiful soup

XML修改并写入文件 beautiful soup

我正在使用 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循环来编辑多个相似的元素。

相关内容