5

TLDR/问题

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

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

背景

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

因此,我计划获取文档的 XML(例如使用Range.WordOpenXML)并区分它们。有许多已发布的用于区分 XML 文档(即Diff(W.XML, W'.XML)diff)的算法,其中 diff 的准确性很大程度上取决于能否正确匹配两个文档中的 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 处理器并为其提供自定义命令?)。

4

1 回答 1

0

对于未来的观众:

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

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

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

于 2016-01-07T02:25:32.040 回答