更新:我解决了这个问题(借助http://dbe.codeplex.com中的一些代码)。
我遇到一个问题,我的xml文件中的元数据没有显示在word文件中。它显示[MyFieldName]
而不是3354
。
我发现快速部分不工作的原因是它的DataBinding。
以下代码修复了第二个具有无效数据绑定的字段控件。
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 = 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[1]
?我怎么知道它不是ns374
?
答案 0 :(得分:0)
ns#:条目是对节点所属的命名空间的引用(名称空间前缀)。这些是在运行时由Word分配的,并且是不可预测的。这意味着,在将来的某个时刻,ns6可能无法正常工作。
因此,您必须在运行时执行一些命名空间管理以获取给定命名空间的前缀。您需要查找命名空间文字才能执行此操作。
例如,ns0可能就是这个: 的xmlns =“http://schemas.openxmlformats.org/officeDocument/2006/custom-properties如果您在CustomXMLPart中的Custom xml中使用了命名空间,那么您将链接到内容控件,这可能是分配给ns6的内容控件。