解析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 验证检查。
我在尝试解析 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 验证检查。