【发布时间】:2015-09-30 15:37:36
【问题描述】:
更新:我解决了这个问题(借助http://dbe.codeplex.com 的一些代码)。
我有一个问题,我的 xml 文件中的元数据没有显示在 word 文件中。它说[MyFieldName] 而不是例如3354。
我发现快速部分不起作用的原因是它的 DataBinding。
- 如果我在 Word 中添加第二个快速部分并将其链接到同一个文档属性,它将很好地显示元数据属性。
- 如果我现在将“工作”DataBinding 添加到不工作的 SdtBlock (SdtProperties) - 原始控件也可以工作!
以下代码修复了具有无效数据绑定的第二个字段控件。
DataBinding validBinding = null;
int count = 0;
foreach (OpenXmlElement openXmlElement in _contentControls)
{
SdtProperties sdtProperties = openXmlElement.Elements<SdtProperties>().FirstOrDefault();
if (sdtProperties == null)
{
throw new Exception("Expected to find some sdt properties!");
}
Tag tag = sdtProperties.Elements<Tag>().FirstOrDefault();
Console.WriteLine("\nProcessing SDT: {0}.", tag.Val);
SdtContentRun sdtContent = openXmlElement.Elements<SdtContentRun>().Single();
Console.WriteLine("Current value: " + sdtContent.InnerText);
if (!sdtContent.InnerText.StartsWith("["))
{
// working control
Console.WriteLine("Found working control");
validBinding = sdtProperties.Elements<DataBinding>().Single();
}
else
{
Console.WriteLine("Found not working control");
DataBinding dataBinding = sdtProperties.Elements<DataBinding>().FirstOrDefault();
if (dataBinding != null) dataBinding.Remove();
dataBinding = new DataBinding();
//dataBinding.PrefixMappings = validBinding.PrefixMappings;
dataBinding.XPath = validBinding.XPath;
dataBinding.StoreItemId = _customXmlPart.CustomXmlPropertiesPart.DataStoreItem.ItemId;
sdtProperties.Append(dataBinding);
}
}
如何在不在 MS Word 中创建快速部件并复制其设置的情况下创建新的工作 DataBinding?
DataBinding dataBinding = new DataBinding();
//dataBinding.PrefixMappings = validBinding.PrefixMappings;
//dataBinding.XPath = validBinding.XPath;
dataBinding.StoreItemId = _customXmlPart.CustomXmlPropertiesPart.DataStoreItem.ItemId;
如何获取 XPath?
工作数据绑定看起来像 <w:dataBinding w:xpath="/ns0:properties[1]/documentManagement[1]/ns6:MyFieldName[1]" w:storeItemID="{45C2489E-0875-4E37-AE02-CFEAFC2294DC}" />
- 为什么没有前缀映射?显然不需要。
- 它仍然使用 ns6:MyFieldName,我想知道 ns6 是在哪里定义的......?
为什么/ns6:MyFieldName[1]?我怎么知道不是@987654328@?
【问题讨论】:
标签: c# ms-word metadata openxml openxml-sdk