3

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。我的文档有两个 XML 部分,分别称为 item1.xml 和 item2.xml。我想替换这些部分中的 XML。我知道我可以使用 .DeleteParts() 删除现有的 xml 部件,我可以使用 AddCustomXmlPart() 创建新部件,但我不想这样做。我只是想替换现有部件的 XML。

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

谢谢你。

编辑哎呀忘记了代码标签

4

1 回答 1

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
于 2012-07-24T18:16:59.020 回答