如果我想将自定义XML部件与幻灯片部件相关联,我知道的方法是在幻灯片中添加一个custData
元素部分,并在id
属性中引用自定义XML部分的关系ID 。
<p:custDataLst>
<p:custData r:id="rId1" />
</p:custDataLst>
据我了解,这是一个显式关系,因为引用是通过关系id进行的。
但是,ECMA-376第1部分,第五版(当前为最新版本)说,幻灯片部分只允许与以下内容具有隐式关系自定义XML部件(第13.3.8节)。
那对我来说真的没有意义。在实践中,我看到了显式关系,而规范仅允许隐式关系。
如果我使用VSTO对象模型,这也是PowerPoint的方法。如果我创建一个全新的VSTO项目,并编辑启动方法,如下所示:
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Application.AfterNewPresentation += pres =>
{
var firstSlide = pres.Slides[1];
var customXmlPart = firstSlide.CustomerData.Add();
customXmlPart.LoadXML("<test></test>");
};
}
然后保存演示文稿并查看包结构,PowerPoint进行了完全相同的操作:向幻灯片中添加了custData
元素,并使用关系ID引用了自定义XML部分。即显式关系。
我有信心规格正确,所以我缺少什么?
答案 0 :(得分:1)
好的,事实证明Office故意不遵循该规范。幸运的是,Microsoft实际上记录了它们偏离标准的地方。可以在Open Specifications website on MSDN上找到此文档。在这里深入文档中,我找到了页面Word, Excel, and PowerPoint Standards Support,其中包含许多PDF文档,这些文档记录了如何在Word,PowerPoint和Excel中实现该标准。进一步深入[MS-OE376]: Office Implementation Information for ECMA-376 Standards Support,第2.1.23.e节指出:
该标准声明允许Presentation部分与Custom XML Data Storage部分具有隐式关系。
Office还允许在Presentation部分和自定义XML数据存储部分之间建立明确的关系。
PDF文档没有对幻灯片进行任何说明,但是现在我不再不确定我是否错误地解释了标准,或者PowerPoint是否不遵循标准。很明显,PowerPoint在很多情况下都没有遵循标准,因此我遇到的具体情况是幻灯片部分和自定义XML数据存储部分之间的明确关系strong>可能只是PowerPoint不遵循标准的另一种情况。