编辑DOCX文件

时间:2016-05-23 21:51:42

标签: python xml python-3.x xml-parsing docx

我正在开展一个应该非常简单的小项目。我知道它以前已经完成但是对于我的生活,我无法让它发挥作用。好吧,所以我使用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中仍然无法正常打开它。

感谢所有帮助!!

1 个答案:

答案 0 :(得分:-1)

你有ET的常见问题。 作为入门者,请查看这些Stackoverflow线程:

如您所见,您不是第一个遇到这些问题的人。

您可以对命名空间执行的操作是将xml解析两次:

  • 第一次提取名称空间和
  • 第二次为了做你的实际工作。

此外,有些人已经建议从Elementtree切换到lxml。