2009-10-08 36 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。