我正在使用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忘记了代码标记
答案 0 :(得分: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