【问题标题】:use simplexml_load_string to parse a XML document STREAM使用 simplexml_load_string 解析 XML 文档 STREAM
【发布时间】:2012-10-05 15:44:31
【问题描述】:

我与将 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. 使用其他解析器/约定

谢谢。

【问题讨论】:

  • 您可能需要考虑使用专为流式传输而设计的解析器,例如 XmlReaderXml Parser

标签: php xml


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 2012-11-02
    • 2012-01-08
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    相关资源
    最近更新 更多