将自定义唯一 ID 分配给 Word 2013 OpenXML 元素

Adi*_*ann 5 ms-word openxml office-addins word-2013 word-addins

TLDR/问题

如何最好地将唯一 ID 分配给描述 Word 文档的 XML 中的(最好是所有)元素,以便我可以从 Word (2013) 加载项读取/写入这些唯一 ID?

此外,描述如何获得两个 Word 文档的良好差异的解决方案可能会有所帮助,但这不是主要问题。

背景

我正在使用 VSTO 创建 Word (2013) 的应用程序级加载项。我的部分任务涉及将原始 Word 文档W与修改后的文档进行比较W',以便我可以为另一项任务处理该差异。虽然 Word 显然具有差异/合并功能(可在 Word 2013 的“审阅”面板中找到),但到目前为止,我还没有找到一种以编程方式提取差异的方法。

因此,我计划获取文档的 XML(例如使用Range.WordOpenXML)并比较它们。有许多已发布的用于比较 XML 文档(即Diff(W.XML, W'.XML))的算法,其中比较的准确性在很大程度上取决于是否能够正确匹配两个文档中的 XML 元素。

建议的解决方案及其问题

因此,我希望能够为可以从加载项访问的 Word 文档的 XML 中的每个元素分配一个唯一的 ID。在这种情况下,解决方案类似于将自定义命名空间导入到名为的包中,并为 DOCX 包中的每个元素mynamespace添加属性。mynamespace:ID=***然后可以通过 访问该属性Range.WordOpenXML

但是,只需使用 mce:Ignorable、mce:ProcessContent 和 mce:PreserveAttributes,详见http://openxmldeveloper.org/blog/b/openxmldeveloper/archive/2012/09/21/markup-compatibility-and-extensibility.aspx不起作用。修改后的 Word 文档加载没有任何问题,但我似乎找不到任何属性,另外保存文档会删除所有添加的标记。

http://openxmldeveloper.org/discussions/formats/f/13/p/8078/163573.aspx看来,通过 Office Open XML 标准的标记兼容性和扩展性 (MCE) 部分使用自定义 xml 的过程已多年来变得复杂(专利问题等)。因此,我猜测我的问题的出现是因为 Word 的 XML 处理器只是删除了它本身无法处理的所有标记(也许有一种方法可以连接到 Word 的 XML 处理器并为其提供自定义命令?)。

Ale*_*nko 0

对于未来的观众:

1)绝对没有办法为大多数元素设置任何类型的id,这些元素可以在Word中生存(您可以使用任何自定义标签或属性,但MS Word打开文档后,它就消失了)

2)只有两个元素可以用作id - ContentControl,它们有id和书签(可以制作一个隐藏书签,在其名称前添加下划线,它仅适用于代码),它们的名称可以是一个id。

3) 如果在 Word 中启用了跟踪更改,则绝对可以使用 Range.WordOpenXML 并从中获取实际的 OpenXml 来查看 XML 中的差异,如此处所述