2009-10-08 35 views
0

使用兼容解析器JAK解析由Google Earth生成的KML時存在一些奇怪的行爲。解析器預期的名稱空間不會被GE Kml生產系統編寫爲正確的名稱空間,並且在將該KML讀回另一個Java應用程序驗證失敗時。消毒KML Stream以更改xml命名空間

我們在讀取流時正在擺弄流,並用適當的名稱空間替換任何其他名稱空間的出現。這隻需要在文件開頭附近完成一次。嘗試的方法是將前幾行解析爲一個字符串,執行搜索和替換,創建字符串流,並使用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> 

順序流返回一個錯誤的可用值(僅適用於序列中的第一個流)導致解析器失敗。

+0

沒有足夠的信息。您正在處理的內容和您期望的內容會非常有用。還有一個解釋是「不起作用」(異常,錯誤信息,輸出錯誤等) – 2009-10-08 17:55:29

回答

1

SequenceInputStream以不同尋常的方式工作。它將兩個流合併成一個虛擬流。 SequenceInputStream的available()方法將返回當前流的長度,而不是按照預期組合的所有流。

取代SequenceInputStream,在讀入數據時,應該使用StringBuffer將文件讀入並進行所需的任何更改。StringBuffer提高了添加字符串對象的性能。如果您在最後需要流輸出,請將StringBuffer.toString()方法解析爲StringStream。