Необычные нотации XML полей слияния в файле DOCX.

В нашей системе генерации документов мы используем файлы 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 ответ

Решение

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

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

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

Другие вопросы по тегам