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)が余分なデータで失敗することです。XMLを実際に解析する必要があるため、パーサーに「最初のX文字を解析する」(またはsubstrを使用する)と言う方法は実際にはありません。もちろん、ドキュメントは例よりもはるかに複雑です。次の方法はありますか?

  1. simplexml_load_string が余分なデータを無視するようにし、ドキュメントと文字列から消費された文字数を返すようにします (したがって、バッファ操作を行うことができます)。
  2. 他のパーサー/規則を使用する

ありがとう。

4

1 に答える 1

0

私自身の質問に答えました。基本的に、 and を使用xml_parser_createxml_parseて失敗すると、 をInvalid document end介してどこで失敗したかがわかりxml_get_current_byte_indexます。その後、substrその時点で を取得して、もう一度試すことができます。効率の悪さは別として、失敗が永続的かどうかを判断することを除いて、概説したすべてのケースで機能するようです...

于 2012-10-05T18:37:27.557 に答える