Необычные нотации 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.
Вы, вероятно, найдете гораздо больше полезного материала в блоге Эрика Уайта.