我有一个二进制流,其中包含连接的XML文档。 使用如下调用以任意大小的块处理流:
int expat_status = XML_Parse(parser->expat, buffer, buffer_size, 0);
如何检测特定数据块是否包含当前解析的XML文档的最后一个字节并检索其位置,以便我可以从下一个字节重新启动解析器以解析流中的下一个XML文档?
答案 0 :(得分:0)
尝试一段时间后,到目前为止我找到的最佳解决方案是监控XML_Parse
错误代码XML_ERROR_JUNK_AFTER_DOC_ELEMENT
。在这种情况下,XML_GetCurrentByteIndex
可用于获取流中包含" junk"的第一个字节的索引。
来自expat文档(关于XML_GetCurrentByteIndex
和该组中的其他功能):
报告的位置是生成当前事件的第一个字符序列(或导致解析函数返回0的错误)。
此索引相对于文档流的开头,因此必须累计后续调用XML_Parse
所消耗的字节数,以计算当前块中其他数据的长度。
然后,可以重新启动解析器并从当前块内的计算位置运行,以开始处理流中后面的另一个XML文档。