xml - tinyxml2 如何从包含 xml 文本和二进制数据的文件中加载 XMLDocument
问题描述
我需要创建一个特殊用途的文件格式,它应该有一个 XML“头”和这个头之后的一大块二进制数据。我想使用 tinyxml2 库来解析 xml。之后,我会将二进制数据拉入一个大字节数组中。xml 标头的大小不固定。xml 标头不会很大,二进制数据通常约为 10-20 MB。我会读入很多文件,所以效率很有价值。
tinyxml2 提供了两种读取文件的方法 LoadFile( const char* filename ) 和 LoadFile( FILE* ),但如果在最后一个元素之后附加非 xml 二进制数据,这些方法将不起作用。
有一个 CDATA 的概念,但我不确定这是否是最有效的方法,因为二进制数据将是 tinyxml2 解析工作的一部分。
您对格式化此文件(即特殊标签、标题大小信息等)和使用 tinyxml2 读取标题有何建议?谢谢!
解决方案
我意识到 tinyxml2 还提供了一个 XMLDocument.Parse() 函数来读取字符串。它还将接受要读取的字节数作为参数。所以我放置了一个特殊的标头标签作为我的文件格式的第一行,它指示二进制数据开始之前的字节数:
<!-- MY_FILE_FORMAT HeaderBytes="956" -->
<?xml version="1.0" encoding="UTF-8"?>
<Element> ... </Element>
binary-data-starts-here
这样我就可以只从以二进制模式打开的文件中提取 xml 部分,并在其上使用 Parse() 函数。我将标签创建为 xml-comment 格式,以便在我的编辑器中正确显示和突出显示。
仍然有兴趣听到是否有更“优雅”的方式。
推荐阅读
- php - PHP中基于对象属性值动态实现接口?
- opentbs - TBS - 将带有分号的字符串合并到 if then 语句中的列表中
- sqlite - How do I MELT a SQL table?
- android - Android 导航架构组件 - 以编程方式
- android - React Native 中的图像键盘支持
- r - How to create a table in R with 1s and 0s based on the presence of values from several other files
- javascript - 根据子状态角度更改父状态/班级
- matlab - Octave 中的不一致参数
- mongodb - MongoDB:通过拆分 id 进行聚合和分组
- angular - 根据类名生成事件