1

我与将 XML 文档作为文档流提供服务的服务器建立了 TLS/TCP 连接。在任何时候,流可能具有:

  1. 部分文档(例如<doc1>one
  2. 完整的文件(例如<doc1>one</doc1>
  3. 完整文档和部分文档(例如<doc1>one</doc1><doc2>
  4. 多个文件等(例如<doc1>one</doc1><doc2>two</doc2>

当我从流中读取数据时,我只是将读取数据附加到“未解析”缓冲区,然后尝试使用simplexml_load_string. (1)没问题(失败),(2)没问题(工作),我的问题当然是,(3)和(4)因额外数据而失败。我真的没有办法对解析器说“只解析前 X 个字符”(或使用 substr),因为这需要实际解析 XML。当然,这些文档比示例要复杂得多。有没有办法:

  1. 使 simplexml_load_string 忽略额外的数据并让它返回一个文档以及它从字符串中消耗的字符数(这样我就可以进行缓冲区操作),或者
  2. 使用其他一些解析器/约定

谢谢。

4

1 回答 1

0

回答了我自己的问题。基本上,如果我使用xml_parser_createandxml_parse并且它失败了,Invalid document end它会告诉我它在哪里失败了xml_get_current_byte_index. 然后我可以substr在那时再试一次。除了缺乏效率之外,它似乎适用于概述的所有情况,除了告诉失败是否会是永久性的......

于 2012-10-05T18:37:27.557 回答