我正在开展一个应该非常简单的小项目。我知道它以前已经完成但是对于我的生活,我无法让它发挥作用。好吧,所以我使用Microsoft Word创建了一个docx模板,其中包含一个Header,只有一些文本在本文正文中。我的目标是有一个可以改变这个文本的程序。使用python-docx我已经成功地编写了一个可以轻松修改正文的程序。话虽这么说,我正在尝试学习如何使用XML解析来做同样的事情,这将允许更改标题。简而言之,XML解析(我认为它就是这样)将为我提供更多的自由。
我知道在解压缩docx之后,/ document.xml这个词包含正文文本。 到目前为止,这是我的代码。
from lxml import etree as ET
tree = ET.parse('document.xml')
root = tree.getroot()
for i in root.iter('{http://schemas.openxmlformats.org/wordprocessingml/2006/main}t'):
if i.text == 'Title':
i.text = 'How to cook'
tree.write('document_output.xml', xml_declaration = True, encoding = "UTF-8", method = "xml" \
, standalone = "yes")
此程序成功将所需文本更改为更新文本。
这是原始document.xml
https://www.dropbox.com/s/ghe1m176rdqtng7/document.xml?dl=0
这是输出。
https://www.dropbox.com/s/8n9llagozbvb2mz/document_output.xml?dl=0
P.S。从dropbox查看代码,它使所有内容从第4行而不是第1行开始。
如果您在XML查看器中查看它们,您可以看到它们是相同的。此外,如果您使用文本差异工具,唯一的区别是更改的单词。我不认为这很重要,但顶线使用单引号而不是双引号。
希望有人可以解释为什么在Word中仍然无法正常打开它。
感谢所有帮助!!
答案 0 :(得分:-1)
你有ET的常见问题。 作为入门者,请查看这些Stackoverflow线程:
如您所见,您不是第一个遇到这些问题的人。
您可以对命名空间执行的操作是将xml解析两次:
此外,有些人已经建议从Elementtree切换到lxml。