Попытка преобразовать документ MSWord 2007 в формат XML - PullRequest
0 голосов
/ 28 марта 2011

Я надеюсь, что смогу отказаться от истории, но поверь мне в следующем:

  1. У меня есть несколько человек, которые имеют прямой доступ к MSWord 2007
  2. Мы пытаемся подготовить общий документ Word, который можно передать от человека к человеку в течение нескольких месяцев, и они могут «добавлять» новый контент к нему.

Независимо от ответов ниже - вышеизложенное не изменится, независимо от того, какая это ужасная идея или какая у вас может быть лучшая идея ... Я уже шел по этому пути: P.

* * 1010 Мои «мысли» заключались в том, чтобы настроить (в Word) схему XML, чтобы мы могли «помечать» содержимое для определенных областей содержимого (например, номер элемента, описание элемента, основа элемента, параметры элемента, ответ элемента и т. Д.) Я изучил XML-схему чуть менее чем за 6 часов, и, очевидно, я ужасный учитель: у меня есть файл XML-схемы, я импортировал его в Word, я могу пометить области, как и все онлайн учебники ... Я НАДЕЖДА, чтобы сохранить в файл "XML" (из Word), чтобы он выглядел так:
<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 для поставщика).

Проблема: всякий раз, когда я сохраняю файл в XML из MSWord 2007, он дает мне всю эту ужасную и ужасную хрень с XML повсюду - я проверил, могу ли я разобрать это, надеясь найти встроенные теги XML, и я нахожу их, но они настолько искажены всеми тегами / дерьмом Офисов, что их разбор будет огромной тратой времени.

Наконец: как мне заставить слово автоматически заполнять теги XML (и автоматически понимая, что кто-то должен «выбрать текст», «назначить XML» ... говорить больше о «сохранении» для XML) из схемы, которую я разрабатываю (или я могу просто создать образец дерева XML без схемы?) И экспортировать содержимое, готовое для загрузки / анализа?

Спасибо за чтение моего короткого романа: P (надеюсь, я был достаточно ясен!)

-J

1 Ответ

1 голос
/ 29 марта 2011

Если данные будут такими же единообразными, как и в примере, который вы предоставили (т. Е. Просто note элементы с фиксированным числом полей), вы можете избежать использования одной большой таблицы в документе Word со столбцами для to, from, heading, body и т. Д. Затем вы можете разобрать его в 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'}]}
...