【问题标题】:Sanitizing KML Stream to change xml namespace清理 KML 流以更改 xml 命名空间
【发布时间】:2009-10-08 06:06:26
【问题描述】:

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

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

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

【问题讨论】:

  • 信息不足。您正在处理的内容和您期望的内容的示例将非常有帮助。还有“不起作用”的解释(异常、错误消息、错误输出等......)

标签: java xml kml


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 2013-05-14
    • 1970-01-01
    相关资源
    最近更新 更多