清理KML Stream以更改xml命名空间

时间:2009-10-08 06:06:26

标签: java xml kml

使用兼容的解析器JAK解析Google地球生成的KML时会有一些奇怪的行为。解析器的预期命名空间不是由GE Kml生产系统编写为正确的命名空间,并且当将此KML读回另一个Java应用程序时,验证失败。

我们正在阅读流,因为它被读取并用适当的命名空间替换任何其他命名空间的出现。这只需要在文件开头附近进行一次。尝试的方法是在前几行中解析为字符串,执行搜索和替换,创建字符串流并使用SequenceInputStream将FileInputStream的“rest”连接到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>

序列流返回一个错误的可用值(仅适用于序列中的第一个流),导致解析器失败。

1 个答案:

答案 0 :(得分:1)

SequenceInputStream以不寻常的方式工作。它将两个流连接成一个虚拟流。 SequenceInputStream的available()方法将返回当前流的长度,而不是可能预期的所有流组合。

当读入数据时,您应该使用StringBuffer将文件读入并进行所需的任何更改,而不是SequenceInputStream.BtringBuffer提高了添加字符串对象的性能。如果最后需要流输出,请将StringBuffer.toString()方法解析为StringStream。