保存 xml 文档会导致文件损坏

2024-05-24

我有一个关于如何将 xmldoc 保存为 word 文件的问题。我想打开 word 文件,使用 xmldocument 类对潜在的 xml 结构进行一些操作,然后将其重新保存回 word 文件。这就是我目前正在做的事情:

using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(@"E:\HelloWorld.docx", true))
                {
                   MainDocumentPart mainPart = wordDoc.MainDocumentPart;
                   var xmlDoc = new XmlDocument();
                   using (Stream partStream = part.GetStream())
                   using (XmlReader partXmlReader = XmlReader.Create(partStream))
                     xmlDoc.Load(partXmlReader);
                   //xml node manipulation here

                   xmlDoc.Save(@"E:\HelloWorld.docx");
                 }

然而,这会导致文档损坏。执行此功能的正确方法是什么?


OpenXML 文档不仅仅是一个 XML 文件(实际上,它是一个包含多个文件(其中包括 XML 文件)的 ZIP 存档。

你应该做的是修改你的WordprocessingDocument然后保存它(这是在结束时自动完成的)using块),不保存表示部分文档的 XML 文件:

using (var wordDoc = WordprocessingDocument.Open(fileName, true))
{
    MainDocumentPart mainPart = wordDoc.MainDocumentPart;

    using (Stream partStream = mainPart.GetStream())
    {
        var xmlDoc = new XmlDocument();

        using (XmlReader partXmlReader = XmlReader.Create(partStream))
            xmlDoc.Load(partXmlReader);

        //xml node manipulation here

        partStream.Position = 0;

        using (XmlWriter partXmlWriter = XmlWriter.Create(partStream))
            xmlDoc.Save(partXmlWriter);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

保存 xml 文档会导致文件损坏 的相关文章

随机推荐

  • 当前环境不支持指定的持久类型firebase

    我收到这个错误 当前环境不支持指定的持久性类型 我正在测试我的应用程序 发现当用户登录时 它在任何地方都已登录 所以我尝试使用 firebase 在 Node js Express 上实现会话 希望这能解决这个问题 我的代码是这样的 rou
  • 终端 vim 中的语法高亮显示,但 gVIM 中没有

    我目前在终端中使用 VIM 并且有完美的语法突出显示 但是当我尝试使用 gvim 时 无论什么类型的文件或输入多少次 syntax on 我都没有得到任何语法突出显示 有人有什么想法吗 谢谢 这是我的 vimrc 供感兴趣的人使用 Turn
  • 使用 UserProfileManager 获取随机用户

    我正在尝试为我正在处理的 SharePoint 2010 项目创建一个 Who is Web 部件 此 Web 部件应该从 SharePoint 配置文件中选择一个随机用户并显示他 她的姓名 部门和电话 问题是我找不到直接从用户配置文件中获
  • 根据屏幕尺寸更改 md-grid-list 的布局或 cols 值

    我正在使用的网格列表角材2 https material angular io components grid list examples 这是笨蛋https plnkr co edit 0v9R3e4x3tThh85147x7 p pre
  • 如何在 asp.net 文本框中保留前导空格

    我有一个文本框 Web 控件 它会自动修剪其内容中的任何前导空格 因此当我收到文本时 它与用户最初编写的内容不同 如果他输入了前导空格 有没有办法禁用这个功能 好吧 只有一种解决方案可以覆盖默认行为 那就是编写一个 javascript 函
  • Silverlight:在 XAML 中创建 DataTemplate,并在代码中分配它?

    是否可以在 XAML 中创建 DataTemplate 并通过代码将其应用到各种控件 如果是这样 我如何引用我在 XAML 中构建的 DataTemplate 如果你有
  • 使用 xuggle 将 mp3 转换为 wav 出现异常

    我正在尝试将 mp3 转换为 wav 代码在这里 String mp3 F work pic2talk38512 mp3 String wav F work pic2talk38512 wav TranscodeAudioAndVideo
  • 避免刷新时上传图片

    我正在使用最简单的图像上传形式 我非常希望保持这种方式 只需要一些 php 代码看起来像这样
  • 使用 Homebrew 安装 Git 时出现问题 [重复]

    这个问题在这里已经有答案了 可能的重复 使用 Homebrew 升级 Git 时出现问题 https stackoverflow com questions 12362021 problems upgrading git with home
  • [python]没有属性“TessBaseAPI”

    当我编译代码时出现错误 import tessercat api tesseract TessBaseAPI 错误是 AttributeError 模块 对象没有属性 TessBaseAPI 我已经安装了tesseract via pip
  • 使用 Google Apps 脚本处理数组中输入元素中的多个文件

    我有一个表单 允许从下拉列表中选择一个项目并上传文件 项目的名称和 ID 保存在电子表格文档中 适用于一个文件 但我想上传多个文件 你能帮我修改一下脚本吗 HTML 部分如下所示 div class col md 4 col sm 6 di
  • 如何将方法从其类中取出(并放入新的或现有的类中)?

    使用 Visual studio 2010 Resharper 将现有方法从其类中拉出并放入新类中的最简单方法是什么 编辑 我使用 Resharper 版本 5 从 开始 公共无效方法 首先 使用 Make Method Static 命令
  • 从 Bitmap 类创建 .bmp 图像文件

    我创建了一个使用套接字的应用程序 客户端在其中接收图像并将图像数据存储在 Bitmap 类中 谁能告诉我如何创建一个名为我的图像 png or 我的图像 bmp来自此 Bitmap 对象 String base64Code dataInpu
  • Java,将 null 分配给对象和仅声明之间有什么区别

    之间有什么区别 Object o null and Object o 仅声明 有人可以回答我吗 这取决于您声明变量的范围 例如 局部变量没有default values在这种情况下你将不得不分配null手动 在这种情况下实例变量分配 nul
  • 谷歌脚本循环性能

    我是 google 脚本的新手 我不确定为什么与 Excel VBA 的简单循环相比 我的性能如此差 我附上了下面的代码 它是一个大约 1200 行的循环 每秒删除大约 2 3 行 我写的脚本效率很低吗 我还不熟悉 Javascript 但
  • Eclipse 自动完成更改变量名称

    只是一个愚蠢的问题 但很难搜索 因为有很多关于 Eclipse 自动完成的主题 而且很难找到与我的问题匹配的内容 所以问题是 如果我写 MyClass MyVarName 然后按空格键 添加 new MyClass Eclipse 自动添加
  • 在Python中迭代文件对象不起作用,但readlines()可以,但效率低下

    在下面的代码中 如果我使用 for line in fin 它只对 a 执行 但如果我使用 wordlist fin readlines for line in wordlist 然后它执行 a thru z But readlines 立
  • 防止 paredit 在插入括号时插入空格 - 以及其他问题

    我爱帕雷迪 但有一些事情我讨厌 而且还没有解决 打开括号会插入一个空格before括号 我知道这可能是整个互联网的首选风格 但它不是我的 如何避免这种情况呢 当位于引用区域内时 我无法回删除 另外 输入双引号 将插入一个反斜杠 显然是为了转
  • 如何为 symfony2 网站启用 gzip 压缩?

    我正在使用 servergrove 进行网站托管 但他们确实缺乏可以帮助我的员工 如何为 symfony2 站点设置 gzip 压缩 如果可能的话 以一种防白痴的方式 因为我对Linux一无所知 我将以下内容添加到 web 文件夹中的 ht
  • 保存 xml 文档会导致文件损坏

    我有一个关于如何将 xmldoc 保存为 word 文件的问题 我想打开 word 文件 使用 xmldocument 类对潜在的 xml 结构进行一些操作 然后将其重新保存回 word 文件 这就是我目前正在做的事情 using Word