尝试将MSWord 2007文档转换为XML格式

时间:2011-03-28 09:23:30

标签: python xml ms-word xsd schema-design

我希望我可以放弃历史,但请相信以下内容:

  1. 我有几个人可以立即访问MSWord 2007
  2. 我们正在尝试准备一个可以在人与人之间传递的通用Word文档 在几个月的时间里,他们可以“添加”新的内容。
  3. 无论下面的答案如何 - 无论这个想法多么可怕,或者你有什么更好的想法,上面的内容都会保持不变......我已经走了这条路:P。

    1. 我的'想法'是设置(在Word中)一个XML Schema,以便我们可以'标记'特定内容区域的内容(例如项目编号,项目描述,项目主干,项目选项,项目答案等)< / LI>
    2. 我在不到6个小时的时间里自学了XML架构,显然我是一个可怕的老师:我有XML Schema文件,我已将其导入Word,我可以按照所有在线标记区域教程...
    3. 我正在希望保存到一个“XML”文件(来自Word)并让它看起来像:
    4. <note>
      <to>Tove</to>
      <from>Jani</from>
      <heading>Reminder</heading>
      <body>Don't forget me this weekend!</body>
      </note>
      

      (只是将其从一个随机网站上拉下来,以证明我想从word文档中保存XML结构并填入数据)

      希望我可以用Python解析,或者将XML文件发送给供应商,供应商然后可以将信息上传到日期库(不 - 我们不能只上传到数据库 - 它必须从Word文档到供应商的XML)。

      问题:每当我从MSWord 2007将文件保存到XML时,它给了我所有这些可怕的可怕的XML垃圾 - 我已经检查过是否可以解析它,希望找到嵌入的XML标签,而且我发现它们,但所有办公室标签/废话都是如此混乱,解析它会浪费大量时间。

      最后:我怎样才能自动填写XML标签(并且我自动了解有人必须“选择文本”,“分配XML”...更多地谈论'保存'到一个XML)来自我开发的模式(或者我可以创建一个没有模式的示例XML树?)并导出准备上传/解析的内容?

      感谢您阅读我的短篇小说:P(希望我足够清楚!)

      -J

1 个答案:

答案 0 :(得分:1)

如果数据与您提供的示例一样统一(即只有note元素,并且具有固定数量的字段)您可能能够在Word文档中拥有一个大表, tofromheadingbody等的列。然后,您可以使用this question中描述的方法之一在Python中解析它输出您的自定义XML。由于.docx文件已经是XML,这可能会也可能不会使您的工作更简单。

如果数据会更复杂,一个想法可能是使用Word样式将文本映射到正确的标记。您可以为每个标签创建自定义样式,这样用户可以快速轻松地单击(并且可能具有不同的颜色和/或字体)。然后在解析文档时,您可以根据应用的段落样式过滤所有内容。不过,我认为这条路线会很痛苦。

另一种选择可能是使用结构化语法编写文档,如YAML,这很容易手动读/写,您可以解析只是将文件保存为纯文本,例如

# plaintext_export.txt
------------------
Notes:
- From: Somebody
  To: Somebody-else
  Heading: This is a heading
  Message: > 
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
    tempor incididunt ut labore et dolore magna aliqua. 

- From: Another guy
  To: Me
  Heading: Huh?
  Message: >
    Some other message content.

解析就像:

>>> import yaml
>>> from pprint import pprint
>>> with open("plaintext_export.txt", 'r') as f:
...     data = yaml.load(f)
...
>>> pprint(data)
{'Notes': [{'From': 'Somebody',
            'Heading': 'This is a heading',
            'Message': 'Lorem ipsum dolor sit amet, consectetur adipisicing elit
, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. \n',
            'To': 'Somebody-else'},
           {'From': 'Another guy',
            'Heading': 'Huh?',
            'Message': 'Some other message content.\n',
            'To': 'Me'}]}