代码之家  ›  专栏  ›  技术社区  ›  whatnick

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

  •  0
  • whatnick  · 技术社区  · 16 年前

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

    我们在读取流时对其进行篡改,并用适当的名称空间替换任何其他名称空间的出现。这只需要在文件开头附近执行一次。尝试的方法是将前几行解析为字符串,执行搜索和替换,创建stringstream,并使用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>
    

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

    1 回复  |  直到 16 年前
        1
  •  1
  •   Alphie    16 年前

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