Другое имя в поле слияния

У меня есть документ Word с одним полем mergeField с именем "NBJ"
MergeField

Я открываю document.xml и нахожу

<w:instrText xml:space="preserve"> MERGEFIELD NB</w:instrText>

Документ работает нормально, но я не понимаю, почему у меня нет того же имени поля слияния?


person Joc02    schedule 03.05.2016    source источник


Ответы (1)


Кодирование поля может быть разделено на более чем один элемент, поэтому, если вы еще раз взглянете на XML своего документа, я предполагаю, что вы найдете еще один такой элемент, текстовое содержимое которого начинается с «J».

В общем, когда вы имеете дело с XML-кодированием в Word, вам нужно знать, что Word часто разбивает текст на несколько частей. Конечно, не всегда очевидно, почему, но есть две распространенные причины:

  • Для разных частей текста используется разное форматирование. Обычно вам это не нужно или вы получаете это в имени поля слияния, но, например, первый «запуск» кода поля может быть отформатирован, потому что кому-то нужно использовать переключатель поля *Charformat, чтобы применить этот формат к результат всего поля
  • Отслеживание изменений зафиксировало, что вы изменили/добавили/удалили часть текста.
person Community    schedule 03.05.2016
comment
Это правильно, я нахожу другой элемент с J. Но я вручную разбираю document.xml, чтобы найти все MERGEFIELD. Как лучше всего создать список MERGEFIEL? Или как я могу объединить 2 части моего MERGEFIELD? - person Joc02; 03.05.2016
comment
Ну, это не тривиально (например, элементы instrText не являются дочерними элементами одного элемента поля. Word также допускает вложение полей). Мне пришлось бы работать с этим с нуля, поэтому на данный момент я думаю, что вы должны (а) изучить это немного больше, взглянуть на XML и то, что вы могли бы сделать с XPath, например, тогда, если вы все еще можете не получится, опубликуйте свои усилия и посмотрите, может ли кто-нибудь помочь... - person ; 03.05.2016
comment
@Joc02 Joc02 Я бы посоветовал вам создать логику для вхождений ‹w:fldChar w:fldCharType=begin/› и ‹w:fldChar w:fldCharType=end/›. Вы должны искать элементы instrText внутри диапазона начала-конца, также вы должны учитывать вхождения другого начала внутри начала (элементы дочернего поля внутри встроенных инструкций родительского поля. - person Mario Z; 04.05.2016
comment
@Joc02 просматривает материалы Эрика Уайта (например, здесь: ericwhite.com/blog/ Introduction-to-wordprocessingml-series ) может быть полезной отправной точкой. - person ; 04.05.2016