Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 在KML ExtendedData中存储自定义数据_Xml_Kml_Google Earth - Fatal编程技术网

Xml 在KML ExtendedData中存储自定义数据

Xml 在KML ExtendedData中存储自定义数据,xml,kml,google-earth,Xml,Kml,Google Earth,我正在编写一些代码来输出KML文件,特定于应用程序的信息存储在ExtendedData节点中。作为调试KML有效性的一种简单方法,我使用启用了“显示所有错误的提示”选项()的Google Earth 我正试图将ExtendedData编写为非类型化的任意标记,正如在namespace_prefix:other(请参阅:)下的KML引用中记录的那样。问题是,即使我精确复制了它们的示例代码,Google Earth也会抱怨未知元素: 以下是完整的KML: <?xml version="1.0"

我正在编写一些代码来输出KML文件,特定于应用程序的信息存储在ExtendedData节点中。作为调试KML有效性的一种简单方法,我使用启用了“显示所有错误的提示”选项()的Google Earth

我正试图将ExtendedData编写为非类型化的任意标记,正如在namespace_prefix:other(请参阅:)下的KML引用中记录的那样。问题是,即使我精确复制了它们的示例代码,Google Earth也会抱怨未知元素:

以下是完整的KML:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
    <name>Sample KML.kml</name>
    <Placemark>
        <name>Test KML</name>
        <Point>
            <coordinates>-118.405022621,33.943893977,0</coordinates>
        </Point>
        <ExtendedData xmlns:prefix="camp">
            <camp:number>14</camp:number>
            <camp:parkingSpaces>2</camp:parkingSpaces>
            <camp:tentSites>4</camp:tentSites>
        </ExtendedData>
    </Placemark>
</Document>
</kml>

示例KML.KML
测试KML
-118.405022621,33.943893977,0
14
2.
4.

我知道有其他方法可以包含特定于应用程序的数据(例如,等等)——但对于这个问题,我想弄清楚为什么谷歌自己的软件直接从他们自己的示例中报告这是无效的。我是否遗漏了KML中的其他内容,或者我误解了文档?

示例是正确的。但是,当在Google Earth中启用“显示所有错误提示””选项时,扩展数据的任意名称空间始终显示为错误

这是2009年报告的一个问题,但尚未解决。

根据KML2.2规范的定义,对扩展数据使用任意名称空间是KML的一种有效用法,因此这并不是一个真正的错误。Google Earth只是报告说,它不知道该如何处理该元素,这在某种意义上是正确的,即当Google Earth保留该数据但不处理它时。不应将其作为错误报告

下面是一个在KML中为扩展数据使用真实名称空间的示例。此示例使用Dublin Core命名空间作为KML的元数据:


如果要验证KML中的任意名称空间,则不能使用Google Earth的验证。您需要一个支持XML模式的验证器,如独立注释行工具。可以在Google Earth中找到关于验证的进一步讨论。

我也被这一点打断了——我对问题和答案投了赞成票。但是我想补充一点,您复制的XML在技术上是不正确的。你是从以下方面得到的:

而更好的解释和正确的xml位于:

如前所述,它对这些错误没有帮助。如果您的版本能够正常工作,那是因为您直接使用的是名称空间,而不是前缀

以下是第二个站点的示例:

<ExtendedData xmlns:camp="http://campsites.com">
  <camp:number>14</camp:number>
  <camp:parkingSpaces>2</camp:parkingSpaces>
  <camp:tentSites>4</camp:tentSites>
</ExtendedData>

14
2.
4.
请注意,“prefix”替换为实际前缀(“camp”),命名空间用于定义前缀,但不使用


只有2c。

太好了,谢谢你提供的信息。这个问题在五年前就被报道了,但至今仍未得到解决,这让人大吃一惊。我想现在可以放心地认为这永远不会发生。遗憾的是,只需在Google Earth中打开KML(无需互联网连接),验证KML肯定要方便得多。不过,谢谢你的详尽回答!:)我同意@GerardONeill。我从Google Earth上观察到了同样的错误,即使第二个站点的例子是正确的。