【问题标题】:How to find the end of an XML document in a stream with expat?如何使用 expat 在流中查找 XML 文档的结尾?
【发布时间】:2015-06-09 08:49:46
【问题描述】:

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

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

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

【问题讨论】:

    标签: c xml-parsing


    【解决方案1】:

    尝试了一段时间后,目前我发现的最佳解决方案是监控XML_Parse 的错误代码XML_ERROR_JUNK_AFTER_DOC_ELEMENT。在这种情况下,XML_GetCurrentByteIndex 可用于获取流中包含“垃圾”的第一个字节的索引。

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

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

    这个索引是相对于文档流的开始的,所以后续调用XML_Parse所消耗的字节数必须累加来计算当前块中附加数据的长度。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-24
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多