如何使用 expat 在流中查找 XML 文档的末尾?
How to find the end of an XML document in a stream with expat?
我有一个包含串联 XML 文档的二进制流。
使用这样的调用以任意大小的块处理流:
int expat_status = XML_Parse(parser->expat, buffer, buffer_size, 0);
如何检测到特定数据块包含当前已解析 XML 文档的最后一个字节并检索其位置,以便我可以从下一个字节重新启动解析器以解析下一个 XML 流中跟随的文档?
经过一段时间的尝试,目前我找到的最佳解决方案是监控 XML_Parse
以获取错误代码 XML_ERROR_JUNK_AFTER_DOC_ELEMENT
。在这种情况下 XML_GetCurrentByteIndex
可用于获取包含 "junk".
的流中第一个字节的索引
来自 expat 文档(关于 XML_GetCurrentByteIndex
和该组的其他功能):
The position reported is that of the first of the sequence of characters that generated the current event (or the error that caused the parse functions to return 0.)
这个索引是相对于文档流的开头的,所以需要累加后续调用XML_Parse
消耗的字节数来计算当前块中额外数据的长度。
然后,可以重新启动解析器并从当前块内的计算位置 运行 开始处理流中紧随其后的另一个 XML 文档。
我有一个包含串联 XML 文档的二进制流。 使用这样的调用以任意大小的块处理流:
int expat_status = XML_Parse(parser->expat, buffer, buffer_size, 0);
如何检测到特定数据块包含当前已解析 XML 文档的最后一个字节并检索其位置,以便我可以从下一个字节重新启动解析器以解析下一个 XML 流中跟随的文档?
经过一段时间的尝试,目前我找到的最佳解决方案是监控 XML_Parse
以获取错误代码 XML_ERROR_JUNK_AFTER_DOC_ELEMENT
。在这种情况下 XML_GetCurrentByteIndex
可用于获取包含 "junk".
来自 expat 文档(关于 XML_GetCurrentByteIndex
和该组的其他功能):
The position reported is that of the first of the sequence of characters that generated the current event (or the error that caused the parse functions to return 0.)
这个索引是相对于文档流的开头的,所以需要累加后续调用XML_Parse
消耗的字节数来计算当前块中额外数据的长度。
然后,可以重新启动解析器并从当前块内的计算位置 运行 开始处理流中紧随其后的另一个 XML 文档。