2011-06-14 9 views
6

Estoy agregando un poco de XML personalizado a un docx para rastrearlo dentro de una aplicación que estoy escribiendo.¿Por qué mi XML personalizado no se transfiere a una nueva versión de un archivo DOCX cuando Word lo guarda?

Lo he hecho manualmente al abrir el documento de Word a través de una biblioteca ZIP, y mediante la ruta oficial de Open XML SDK. Ambos tienen el mismo resultado de que mi XML se inserte en la carpeta personalizada XML del documento. El documento se abre bien en Word para ambos métodos, y el XML está presente.

PERO cuando guardo el documento como MyDoc2.docx, por ejemplo, todo mi XML desaparece.

¿Qué estoy haciendo mal?

enlaces de Microsoft He estado siguiente:

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

Y el código que he tomado desde el Abierto 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); 
     } 
    } 
} 

Gracias, John

+0

He encontrado la respuesta, la publicaré aquí cuando StackOverflow me lo permita, aún faltan algunas horas ... –

Respuesta

5

Ok, así que me las arreglé para encontrar lo siguiente Artículo Using Custom XML Part as DataStore en openxmldeveloper.org, y se han despojado del código innecesario para que se inserta y retiene XML personalizado:

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; 
     } 
    } 
} 

pues, todos los ejemplos de Microsoft funcionará siempre y cuando no modifique el archivo. El problema parece ser que no configuramos la relación con el documento principal.

Cuestiones relacionadas