【发布时间】:2015-06-09 08:49:46
【问题描述】:
我有一个包含串联 XML 文档的二进制流。 使用如下调用以任意大小的块处理流:
int expat_status = XML_Parse(parser->expat, buffer, buffer_size, 0);
如何检测特定数据块包含当前解析的 XML 文档的最后一个字节并检索其位置,以便我可以从下一个字节重新启动解析器以解析流中的下一个 XML 文档?
【问题讨论】:
标签: c xml-parsing
我有一个包含串联 XML 文档的二进制流。 使用如下调用以任意大小的块处理流:
int expat_status = XML_Parse(parser->expat, buffer, buffer_size, 0);
如何检测特定数据块包含当前解析的 XML 文档的最后一个字节并检索其位置,以便我可以从下一个字节重新启动解析器以解析流中的下一个 XML 文档?
【问题讨论】:
标签: c xml-parsing
尝试了一段时间后,目前我发现的最佳解决方案是监控XML_Parse 的错误代码XML_ERROR_JUNK_AFTER_DOC_ELEMENT。在这种情况下,XML_GetCurrentByteIndex 可用于获取流中包含“垃圾”的第一个字节的索引。
来自 expat 文档(关于 XML_GetCurrentByteIndex 和该组的其他功能):
报告的位置是生成当前事件(或导致解析函数返回 0 的错误)的第一个字符序列的位置。
这个索引是相对于文档流的开始的,所以后续调用XML_Parse所消耗的字节数必须累加来计算当前块中附加数据的长度。
然后,解析器可以重新启动并从当前块内的计算位置运行,以开始处理流中跟随的另一个 XML 文档。
【讨论】: