OpenXML替换word文档的特定customxml部分

我正在使用OpenXML SDK ver 2来操作一些word文档。 文档目前有自定义的xml部分,我想要做的是具体替换部件的xml。

我知道我可以做这样的事情来访问文档的customxml部分:

 Dim mainStream As New MemoryStream() Dim buffer As Byte() = File.ReadAllBytes(Server.MapPath("myfile.docx")) mainStream.Write(buffer, 0, buffer.Length) Try Using mainDocument As WordprocessingDocument = WordprocessingDocument.Open(mainStream, True) MainDocumentPart mainPart = mainDocument.MainDocumentPart; 'collection of custom xml parts Dim parts = mainPart.CustomXmlParts For Each part As CustomXmlPart In parts 'how do I replace the xml here?? Next 

但正如您所看到的,我不确定如何替换该部分的XML。 我的文档有两个名为item1.xml和item2.xml的XML部分。 我想替换这些部分中的XML。 我知道我可以使用.DeleteParts()删除现有的xml部分,我可以使用AddCustomXmlPart()来创建新的部分,但我不想这样做。 我只是想替换现有部件的XML。

谁能建议我怎么做? 任何建议表示赞赏。

谢谢。

编辑 oops忘记了代码标签

使用CustomXmlPart实例的FeedData()方法替换自定义xml部件的XML。 FeedData()方法首先截断零件流,然后将新数据写入零件流。 因此,您可以使用此方法替换现有自定义xml部件中的XML。

 MainDocumentPart mainPart = mainDocument.MainDocumentPart; Dim parts = mainPart.CustomXmlParts For Each part As CustomXmlPart In parts Dim ms As New MemoryStream Dim xtw As New XmlTextWriter(ms, Encoding.UTF8) ' Create your xml.' xtw.WriteStartDocument() xtw.WriteStartElement("bla") xtw.WriteEndElement() xtw.WriteEndDocument() xtw.Flush() ms.Seek(0, SeekOrigin.Begin) part.FeedData(ms) ' Replace old xml in part stream.' xtw.Close() Next