【问题标题】:OpenXML replace specific customxml part of word documentOpenXML 替换 word 文档的特定 customxml 部分
【发布时间】:2012-07-23 02:08:44
【问题描述】:

我正在使用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。

谁能建议我如何做到这一点?任何建议表示赞赏。

谢谢。

编辑哎呀忘记了代码标签

【问题讨论】:

    标签: c# xml ms-word openxml


    【解决方案1】:

    使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多