使用simplexml_load_string解析XML文档STREAM

时间:2012-10-05 15:44:31

标签: php xml

我有一个TLS / TCP连接到服务器,该服务器将XML文档作为文档流提供。在任何时候,流可能具有:

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

    1. make simplexml_load_string忽略额外的数据并让它返回一个文件和它从字符串中消耗的字符数(所以我可以做缓冲区操作),或者
    2. 使用其他一些解析器/约定
    3. 感谢。

1 个答案:

答案 0 :(得分:0)

回答了我自己的问题。基本上,如果我使用xml_parser_createxml_parse并且Invalid document end失败,则会通过xml_get_current_byte_index告诉我失败的地方。然后,我可以在那时取substr并再次尝试。除了缺乏效率之外,它似乎适用于所列出的所有案例,除非告知失败是否是永久性的......