Необычные нотации XML полей слияния в файле DOCX. - PullRequest
2 голосов
/ 29 июля 2011

В нашей системе генерации документов мы используем файлы DOCX, в которых мы программно заполняем поля слияния. Для этого я использую OpenXml SDK 2.0.

Я просматривал файл document.xml в de docx и обнаружил, что поля слияния обычно представлены SimpleField. Пример из документа, который мы используем:

<w:fldSimple w:instr=" MERGEFIELD  NP021_INSSNumber  \* MERGEFORMAT "><w:r><w:rPr><w:noProof/></w:rPr><w:t>«NP021_INSSNumber»</w:t></w:r></w:fldSimple>

Довольно простая запись, содержащая команду mergefield и текст для отображения в документе. Найти этот тег в XML довольно просто, просто найдите теги w: fldSimple. (Я удалил некоторые теги стиля, чтобы сделать его более читабельным)

Но документ, недавно созданный в Word, не был проанализирован в нашем коде, и когда я посмотрел в XML, нотация для полей слияния была совершенно другой:

<w:instrText xml:space="preserve"> MERGEFIELD  NP021_INSSNumber  \* MERGEFORMAT </w:instrText>

А позже в документе я нашел обозначение на дисплее: <w:t>«NP021_INSSNumber»</w:t> Это невероятно невозможно разобрать в коде.

Как возможно, что выполнение одного и того же действия в Word может иметь такие разные результаты, и есть ли способ гарантировать, что Word использует SimpleFields в качестве нотации XML для полей слияния?

Заранее благодарю за любой полезный вклад.

1 Ответ

2 голосов
/ 30 июля 2011

Я бы посоветовал принять ревизии и , упрощающие разметку перед ее разбором.

Обратите внимание, что MarkupSimplifier включен в Power Tools for OpenXML .

Вероятно, вы найдете гораздо больше полезного материала в блогах Эрика Уайта .

...