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



我们编写了一个软件,用于处理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>

该段落开始很好,完整的代码[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方法来实现同样的事情,那将更加优雅。

这里的问题既不是用户在 Word 中的行为,也不是跨w:r元素的文本表示形式。 问题在于软件天真地假设要替换的文本必须存在于单个w:r元素中。 就其本身而言,这只是一个糟糕的假设。

您的选项包括

  1. 修复替换程序,使其对跨运行的分区不敏感。
  2. 规范化 OOXML 以满足脆性替换程序的需求。
  3. 使用另一个 OOXML 构造(如内容控件而不是文本)作为占位符。

与此同时,回到牧场,我实际上找到了解决这个问题的一个非常简单的方法。

用户可以识别无法正常工作的段落,因为在处理后,它仍然包含代码,而不是它们的替换值。

要修复段落,他们需要做的就是使用格式刷。选择他们喜欢的格式,将其应用于整个违规段落和鲍勃的叔叔,问题就解决了。

最新更新