2011-06-14 30 views
6

我正在將一些自定義XML添加到docx中,以在我正在編寫的應用程序中跟蹤它。爲什麼在Word保存它時,我的自定義XML不會轉移到新版本的DOCX文件?

我已經通過打開Word文檔,通過ZIP庫,以及通過官方的Open XML SDK路徑手動完成它。兩者都具有相同的結果,我的XML被插入到文檔中的customXml文件夾中。文檔中的這兩種方法都可以正常打開文檔,並且存在XML。

但是當我然後將文檔保存爲MyDoc2.docx例如我所有的XML都消失了。

我在做什麼錯?

我一直在關注

微軟鏈接:

http://msdn.microsoft.com/en-us/library/bb608597.aspx
http://msdn.microsoft.com/en-us/library/bb608612.aspx

而且我從打開XML SDK 2.0所代碼:

public static void AddNewPart(string document, string fileName) 
{ 
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true)) 
    { 
     MainDocumentPart mainPart = wordDoc.MainDocumentPart; 

     CustomXmlPart myXmlPart = mainPart.AddCustomXmlPart(CustomXmlPartType.CustomXml); 

     using (FileStream stream = new FileStream(fileName, FileMode.Open)) 
     { 
      myXmlPart.FeedData(stream); 
     } 
    } 
} 

感謝, 約翰

+0

我找到了答案,當StackOverflow讓我時,我會在這裏發佈它,它還有幾個小時呢...... – 2011-06-14 15:14:11

回答

5

好吧,所以我設法找到以下rticle Using Custom XML Part as DataStore上openxmldeveloper.org,並去掉了不必要的代碼,以便它插入並保留自定義XML:

static void Main(string[] args) 
{ 
    using (WordprocessingDocument doc = WordprocessingDocument.Open("Test.docx", true, new OpenSettings())) 
    { 
     int customXmlPartsCount = doc.MainDocumentPart.GetPartsCountOfType<CustomXmlPart>(); 

     if (customXmlPartsCount == 0) 
     { 
      CustomXmlPart customXmlPersonDataSourcePart = doc.MainDocumentPart.AddNewPart<CustomXmlPart>("application/xml", null); 
      using (FileStream stream = new FileStream("Test.xml", FileMode.Open)) 
      { 
       customXmlPersonDataSourcePart.FeedData(stream); 
      } 


      CustomXmlPropertiesPart customXmlPersonPropertiesDataSourcePart = customXmlPersonDataSourcePart 
                       .AddNewPart<CustomXmlPropertiesPart>("Rd3c4172d526e4b2384ade4b889302c76"); 

      Ds.DataStoreItem dataStoreItem1 = new Ds.DataStoreItem() { ItemId = "{88e81a45-98c0-4d79-952a-e8203ce59aac}" }; 
      customXmlPersonPropertiesDataSourcePart.DataStoreItem = dataStoreItem1; 
     } 
    } 
} 

因此,所有從微軟的例子中工作,只要你不修改該文件。問題似乎是因爲我們沒有建立與主文檔的關係。

相關問題