c++ - 使用 Word 的 CustomXMLPart 或任何其他支持的方式存储 UTF-8 XML

标签 c++ xml visual-c++ ms-word openxml

我正在编写一个 Word 加载项,它应该使用 Word 对象模型及其 CustomXMLPart 为每个文档存储一些自己的 XML 数据。我现在面临的问题是缺少用于从 CustomXMLPart 读取/写入 XML 的类似于 IStream 的功能。它只提供 BSTR 接口(interface),我很困惑如何用 BSTR 处理 UTF-8 XML。据我了解,UTF-8 XML 文件实际上永远不必进行这种 Unicode 转换。我不确定这里会产生什么结果。

是否有另一种方法可以使用 Word 自动化界面在 DOCX 文件中存储任意自定义信息?

最佳答案

“包”是一个 OPC 文档 ( Open Packaging Convention ),它基本上是一个具有不同扩展名(例如 .pptx、.docx、.xps 等)的结构化 zip 文件夹。您可以在流中获取该文件并以您喜欢的任何方式对其进行操作 - 但不是任意的。如果您将内容放在错误的位置(不仅是 xml 元素,还有 zip 文件中文件夹中的文件),它将不会被识别为有效的 docx。但是,如果您只是在谈论“任意”意思是 CustomXMLPart,那没关系。

This是了解更多关于 Open XML SDK 的很好的启动页面如果您愿意,这比使用 (.NET) System.IO.Packaging 或第三方 zip 库更容易访问文件格式。要深入了解,请获取电子书(免费)Open XML Explained .

使用 .NET 中的 Open XML SDK(同样,这一切都可以在没有 SDK 的情况下完成),这就是您想要做的:How to: Insert Custom XML to an Office Open XML Package by Using the Open XML API .

关于c++ - 使用 Word 的 CustomXMLPart 或任何其他支持的方式存储 UTF-8 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2982002/

相关文章:

java - 无法解析 javax.xml.xquery.XQException

sql - 避免在 SQL XML 属性中对 & 符号进行编码

c++ - 显示 IPv6 地址

c++ - WinAPI 函数 LoadLibrary() 导致函数在执行错误期间失败

c++ - 为什么在为数组分配新值时会崩溃?

c++ - 为什么这个程序会创建这样的输出?

c++ - 如何测试类型参数是否为模板类型

c# - 如何获取表示两个 XML 文本之间差异的对象集合?

c++ - 函数模板参数的顺序

c++ - 有没有一种方法可以在不显式添加的情况下将对 C++ 类成员的引用添加到 vector 中?