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

The*_*hod 3 c# xml ms-word openxml

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
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢.

编辑 oops忘记了代码标签

Han*_*ans 5

使用实例的FeedData()方法CustomXmlPart替换自定义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
Run Code Online (Sandbox Code Playgroud)