[英]Update Word (OpenXml) Content Control DataBinding programmatically - figure out XPath
更新:我解決了這個問題(借助於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
?
ns#:條目是對節點所屬的名稱空間(名稱空間前綴)的引用。 這些是由Word在運行時分配的,並且是不可預測的。 這意味着在將來的某個時候,ns6可能無法正常工作。
因此,您必須在運行時進行一些名稱空間管理,以獲取給定名稱空間的前綴。 為此,您需要查找名稱空間文字。
例如,ns0可能是這樣的:xmlns =“ http://schemas.openxmlformats.org/officeDocument/2006/custom-properties
如果您在CustomXMLPart的Custom xml中使用了名稱空間,則您將鏈接到內容控件,該名稱空間可能是分配給ns6的名稱空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.