如何使用expat在流中查找XML文档的结尾?

时间:2015-06-09 08:49:47

标签: c xml-parsing

我有一个二进制流,其中包含连接的XML文档。 使用如下调用以任意大小的块处理流:

int expat_status = XML_Parse(parser->expat, buffer, buffer_size, 0);

如何检测特定数据块是否包含当前解析的XML文档的最后一个字节并检索其位置,以便我可以从下一个字节重新启动解析器以解析流中的下一个XML文档?

1 个答案:

答案 0 :(得分:0)

尝试一段时间后,到目前为止我找到的最佳解决方案是监控XML_Parse错误代码XML_ERROR_JUNK_AFTER_DOC_ELEMENT。在这种情况下,XML_GetCurrentByteIndex可用于获取流中包含" junk"的第一个字节的索引。

来自expat文档(关于XML_GetCurrentByteIndex和该组中的其他功能):

  

报告的位置是生成当前事件的第一个字符序列(或导致解析函数返回0的错误)。

此索引相对于文档流的开头,因此必须累计后续调用XML_Parse所消耗的字节数,以计算当前块中其他数据的长度。

然后,可以重新启动解析器并从当前块内的计算位置运行,以开始处理流中后面的另一个XML文档。