DOCX w:t(文本)元素跨越多个 w:r(运行)元素?

7 xml ms-word docx openxml

我们编写了一个软件,可以从 Word 文档的内部 XML 文件中处理 XML,并用替换值替换某些代码。有时我们发现此类代码在多次运行之间被破坏。以下是我们有时会遇到的此类情况的示例:

<w:r>
  <w:rPr>
    <w:szCs w:val="24"/>
  </w:rPr>
  <w:t xml:space="preserve">After all, if you trust [CAN:Forename.ATTORNEY#01] enough to give</w:t>
</w:r>
<w:r>
  <w:rPr>
    <w:color w:val="000000"/>
  </w:rPr>
  <w:t>[CAN:ObjPronoun.ATTORNEY#01</w:t>
</w:r>
<w:r>
  <w:rPr>
    <w:szCs w:val="24"/>
  </w:rPr>
  <w:t xml:space="preserve">] power of attorney, you should trust </w:t>
</w:r>
<w:r>
  <w:rPr>
    <w:color w:val="000000"/>
  </w:rPr>
  <w:t>[CAN:ObjPronoun.ATTORNEY#01</w:t>
</w:r>
<w:r>
  <w:rPr>
    <w:szCs w:val="24"/>
  </w:rPr>
  <w:t>] enough to make the right decisions at the time.</w:t>
</w:r>
Run Code Online (Sandbox Code Playgroud)

该段落一开始很好,完整的代码[CAN:Forename.ATTORNEY#01]很好地嵌入在单个w:t节点中,这很完美,但在其下方,有一个w:t包含代码开头的节点,[CAN:ObjPronoun.ATTORNEY#01但随后w:t标记结束,结束语]位于下次运行。

用户体验是段落的开头呈现得很好,因为它[CAN:Forename.ATTORNEY#01]呈现为某人的名字。但是,用户在 Word 文档中看到的内容对他们[CAN:ObjPronoun.ATTORNEY#01]来说看起来非常好,因此他们希望也将其呈现为某些文本,但我们看不到该代码,因为它被拆分为多次运行,因此呈现的文档仍然包含代码,而不是其替换值。

现在回答我的问题......

有人能解释为什么会发生这种情况吗?如果用户只是输入代码就可以了,但是如果他们返回并摆弄该段落,就会出现这种情况。我们是否可以以“不要这样做”或“不要那样做”或“确保你这样做”之类的方式告诉用户什么?或者Word中是否有选项可以防止这种情况发生?

用户是否可以专门通过 MS Word 前端执行纠正此类段落的操作?目前,我们正在指示他们突出显示整个段落,剪切它,将其粘贴到记事本中(其中它会丢失用户修改历史记录中留下的所有奇怪的碎屑),再次从记事本中复制并将其粘贴回 Word 中。是的。这样可行。但至少可以说,这有点……令人不满意。因此,如果有一个本地 Word 方法来实现同样的事情,那就更优雅了......