在Python中修改XML数据

3 投票
1 回答
546 浏览
提问于 2025-04-18 06:54

我想修改一个pptx格式的xml文件,目的是在幻灯片之间添加一张新的幻灯片。我知道有一个叫做python-pptx的模块,但它无法实现这个功能。

一切都从一个文件"[Content_Types].xml"开始,我首先需要做的是在/ppt/slides/slide3.xml后面插入一段字符串:<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.slide+xml" PartName="/ppt/slides/slide4.xml"/>,然后把其他幻灯片的编号都加1。

完整的xml内容看起来是这样的:

<?xml version="1.0" encoding="UTF-8" standalone="true"?>
-<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.slide+xml" PartName="/ppt/slides/slide1.xml"/>
<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.slide+xml" PartName="/ppt/slides/slide2.xml"/>
<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.slide+xml" PartName="/ppt/slides/slide3.xml"/>
<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.slide+xml" PartName="/ppt/slides/slide4.xml"/>
<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.slide+xml" PartName="/ppt/slides/slide5.xml"/>
<Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.slide+xml" PartName="/ppt/slides/slide6.xml"/>
</Types>

有没有什么建议可以帮我实现这个呢?

1 个回答

1

你不需要使用 XML 解析器来处理这个问题,只需从文件中读取数据,然后在你想要的位置插入你的内容。对于你的情况,把数据加到文件的末尾就可以了,不用在中间插入并移动其他内容,因为你的 XML 没有子树,结果都是一样的。

with open('[Content_Type].xml', 'r') as fl:
    readout = fl.read()
spl = readout.split('><')
spl.insert(len(spl)-1, """Override ContentType="application/vnd.openxmlformats-officedocument.presentationml.slide+xml" PartName="/ppt/slides/slide%d.xml"/""" %(slides+1))
final = '><'.join(spl)
with open('[Content_Type].xml', 'w') as fl:
    fl.write(final)

撰写回答