解析KML文档时publicId和systemId之间需要空格

White spaces are required between publicId and systemId while parsing KML document

我在尝试解析 KML 文档时遇到此错误:

com.bmw.cockpitm.business.backend.spec.ImportException: Error parsing KML data
at com.bmw.cockpitm.data.importers.riskmanagement.SimpleKmlDataImporter.importData(SimpleKmlDataImporter.java:120)
at com.bmw.cockpitm.jobs.ImportRiskEventsJob.execute(ImportRiskEventsJob.java:105)
at org.quartz.core.JobRunShell.run(JobRunShell.java:223)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 50; White spaces are required between publicId and systemId.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:347)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:121)
at com.bmw.cockpitm.data.importers.riskmanagement.SimpleKmlDataImporter.loadEventsData(SimpleKmlDataImporter.java:261)
at com.bmw.cockpitm.data.importers.riskmanagement.SimpleKmlDataImporter.importData(SimpleKmlDataImporter.java:100)
... 3 more

可以找到 KML 文档here

很可能是 kml 文件的格式出现了一些错误,但我不知道它在哪里以及是什么。欢迎任何帮助。

部分 KML:

<?xml version="1.0" encoding="utf-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<description>
    The Global Disaster Alert and Coordination System provides near real-time alerts about natural disasters around the world and tools to facilitate response coordination, including news, maps and V. OSOCC. GDACS is a joint initiative of the European Commission and the United Nations.
</description>
<name>Global Disaster Alert and Coordination system</name>
<Folder>
<name><![CDATA[ Tropical Cyclone HOWARD-16]]></name>
<Placemark id='TC_1000281'>
    <name>Green Alert for  Tropical Cyclone HOWARD-16 </name>
    <extendeddata>
        <data name="eventtype">
            <value>TC</value>
        </data>
        <data name = "eventid" >
            <value>1000281</value>
        </data >
        <data name="episodeid">
            <value>8</value>
        </data>
    </extendeddata>
    <snippet></snippet>

示例 KML 文档不是有效的 KML 文档。它有许多错误,可能导致各种解析错误。但是,它是一个格式正确的 XML 文档,因为开始和结束标记匹配并且属性被引用。

三种错误描述如下:

1。错别字

第一种错误是使用了错误的元素名称。 KML 元素区分大小写。使用错误的元素通常会在 Google 地球中忽略这些元素。 XML 解析器可能会也可能不会忽略这些错误。

Example: `<extendeddata>` element must be renamed with `<ExtendedData>`.

2。乱序元素

下一类错误是乱序元素造成的。 KML 2.2 具有严格的元素顺序,元素应以正确的顺序出现。这可能是 KML 文件中最常见的错误。

示例:

   <Document>
    <description>The Global Disaster Alert...</description>
    <name>Global Disaster Alert and Coordination system</name>

<name> 字段后必须跟 <description> 元素。

3。缺少 altitudeMode 但指定了海拔高度

例如,

LineString 有一个高度分量(例如 30 米),但 altitudeMode 缺失,因此默认情况下假设为 clampToGround 并且高度被忽略。如果希望线条出现在地面之外,则必须指定 altitudeMode 的值为绝对值或 relativeToGround。

<LineString>
     <extrude>0</extrude>
     <coordinates>
       123.5,16.483,30 123.5814,16.491,30 ...
     </coordinates>
</LineString>

建议

必须首先使用验证器验证 KML 文档,例如 KML Validator or Feed Validator. There is also a command-line XML Validator 可以验证任何大小的 KML 或 KMZ 文件的工具。然后修复验证错误。

或者,您可能希望在 SAX 解析器中禁用架构 and/or 验证检查。