0

準拠したパーサーJAKを使用して Google Earth によって生成された KML を解析すると、奇妙な動作が発生します。パーサーによって予期される名前空間は、GE Kml プロダクション システムによって正しい名前空間として書き込まれず、この KML を別の Java アプリケーションに読み戻すときに検証に失敗します。

ストリームが読み取られるときにストリームをいじり、他の名前空間の発生を適切な名前空間に置き換えます。これは、ファイルの先頭付近で 1 回だけ実行する必要があります。試行されたアプローチは、最初の数行を文字列に解析し、検索と置換を実行し、文字列ストリームを作成し、SequenceInputStream を使用して FileInputStream の「残り」を StringStream に連結することでした。ただし、これは機能しません。どんなアイデアでも大歓迎です。

KML xmlns フラグメントの先頭は次のとおりです。

<code>
    <kml xmlns="http://earth.google.com/kml/2.2">
</code>

置き換えたいものは次のとおりです。

<code>
    <kml xmlns="http://www.opengis.net/kml/2.2">
</code>

シーケンス ストリームが誤った使用可能な値を返す (シーケンスの最初のストリームのみ) ため、パーサーが失敗します。

4

1 に答える 1

1

SequenceInputStream は通常とは異なる方法で動作します。2 つのストリームを仮想ストリームに結合します。SequenceInputStream の available() メソッドは、現在のストリームの長さを返します。予想されるように、すべてのストリームを組み合わせたものではありません。

SequenceInputStream の代わりに、StringBuffer を使用してファイルを読み込み、必要な変更を行う必要があります。最後にストリーム出力が必要な場合は、StringBuffer.toString() メソッドを解析して StringStream に変換します。

于 2009-10-09T04:09:04.177 に答える