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
- 无法更新EntitySet的’ItemRankList’,因为它具有DefiningQuery并且不存在元素
- 将IQueryable 对象转换为另一个对象?
- 如何确定属性是否是C#中的用户定义类型?
- 将可观察集合绑定到XAML中的ListBox
- 如何在asp.net上显示MessageBox?
- System.IO.FileNotFoundException:无法加载程序集…也许在Mono for Android Profile中不存在?
- 如何从windows中抑制全局鼠标单击事件?
- 为什么C#round和SQL round函数产生不同的输出?
- Windows 8上具有共享目标的InvalidCastException