DOCX w:t(文本)元素与多个w:r(运行)元素交叉?

时间:2019-03-04 15:18:15

标签: xml ms-word openxml docx

我们已经编写了一个软件,该软件可以处理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],并且 them 看起来很不错,那么他们希望它们也可以呈现为某些文本,我们看不到该代码,因为它是分割成多次运行,因此呈现的文档仍然包含代码,而不是其替换值。

现在有我的问题。...

任何人都可以解释为什么会发生这种情况吗?如果用户只是键入代码就可以了,但是如果他们回过头来仔细研究该段落,则似乎会发生这种情况。有什么我们可以告诉用户的“不做”或“不做”,或“确保您这样做”的方法。还是Word中的选项可以阻止这种情况的发生?

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

2 个答案:

答案 0 :(得分:1)

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

您的选项包括

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

答案 1 :(得分:0)

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

用户可以识别出运行不正常的段落,因为在处理之后,该段落仍包含代码,而不是其替换值。

要修复该段落,他们所需要做的就是使用格式刷。选择他们喜欢的格式,将其应用于整个有问题的段落以及Bob的叔叔,此问题已解决。