0

xml ベースのネットワーク プロトコルを設計して実装したいと考えています。それぞれ Java アプリを実行する 2 つのネットワーク マシンがあります。一方 (クライアント C) は XML シートをもう一方 (サーバー S) に送信します。S はいくつかのデータを処理し、別の XML シートを C に送り返します。

ここで、SAX を XML パーサーとして使用したいと考えています。parse()SAXのルーチンを終了するには、ストリームの終わりが明確に定義されている必要があります。従来のファイル読み取りシナリオでは、これは些細なことです。

最初に、EOS を示すために靴下を終了しようとしましたが、応答が送信されなくなりました。

このスタックオーバーフローの質問では、同様の質問が尋ねられます。複数の解決策が存在するようです:

  • リクエスト XML のルート要素が読み込まれるとすぐに、SAX が停止します ( 経由SAXException)。例外に依存してアルゴリズムを終了させるのは、私には悪いように思えます... これは悪いプログラミング スタイルだと思いますね。
  • サーバーに送信されるバイト数をカウントし、この数値を XML ファイルの前に送信します。ただし、サイズを計算するために事前に XML を作成する必要があります。また、私の目にはベストプラクティスではありません。

それでは、これをできるだけ簡単かつエレガントに確立する方法のヒントを教えていただけますか?

4

2 に答える 2

2

ドキュメントの最後に到達したときに解析を停止したい場合は、ドキュメントendElement()のルート要素で呼び出されたことを検出できます。もちろん、ルート要素を認識できる必要がありますが、現在の深さでカウンターを保持するだけで簡単に実行できるはずです。

確かに、ストリームに余分な情報がある場合、これは検出されませんが、ほとんどの場合、それが問題になるとは思いません。

于 2013-06-03T15:14:14.973 に答える