XSLT 如何根据 Placemark 属性删除 KML Placemark 和子标签
XSLT how to remove KML Placemark and childs tags based on Placemark attribute
我正在使用 Java 中的脚本来使用一些统计数据填充 KML 模板文件。完成此操作后,KML 文件运行良好,我可以在 GIS 或 Google Earth 上看到相关地图。统计数据存储在“描述”字段中。
无论如何,有时数据不可用,该字段由字符串“nodata”填充。我想设置一个 XSL 文件以删除带有“nodata”的整个地标,编写一个新的 KML 文件,仅由数据可用的地标制作。 KML 的结构如下。
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document id="doc">
<Schema name="Geographic_Placemarks">
<SimpleField name="Description" type="string" />
<SimpleField name="x" type="string" />
<SimpleField name="y" type="string" />
</Schema>
<Folder>
<name>Geographic_Placemarks</name>
<Placemark>
<name>Site 1</name>
<description>nodata</description>
<Style>
<LineStyle>
<color>ff0000ff</color>
</LineStyle>
<PolyStyle>
<fill>0</fill>
</PolyStyle>
</Style>
<ExtendedData>
<SchemaData schemaUrl="#Geographic_Placemarks">
<SimpleData name="x">571750 </SimpleData>
<SimpleData name="y">4548250 </SimpleData>
</SchemaData>
</ExtendedData>
<Polygon>
<altitudeMode>clampToGround </altitudeMode>
<outerBoundaryIs>
<LinearRing>
<altitudeMode>clampToGround </altitudeMode>
<coordinates>11.1825432433631,45.6613329598511 11.1298128785963,45.7000370530753 11.1833198656477,45.6994951268141 11.1825432433631,45.6613329598511 </coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
<Placemark>
<name>Site 2</name>
<description>10</description>
<Style>
<LineStyle>
<color>ff0000ff</color>
</LineStyle>
<PolyStyle>
<fill>0</fill>
</PolyStyle>
</Style>
<ExtendedData>
<SchemaData schemaUrl="#Geographic_Placemarks">
<SimpleData name="x">575750</SimpleData>
<SimpleData name="y">4548250</SimpleData>
</SchemaData>
</ExtendedData>
<Polygon>
<altitudeMode>clampToGround</altitudeMode>
<outerBoundaryIs>
<LinearRing>
<altitudeMode>clampToGround</altitudeMode>
<coordinates>11.1825432433631,45.6613329598511 11.1833198656477,45.6994951268141 11.2337967406582,45.6989609013362 11.2329870100429,45.6607994408117 11.1825432433631,45.6613329598511 </coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
</Folder>
</Document>
</kml>
我已经尝试准备一个 XSL 文件来复制 KML 文件的所有行,但带有“nodata”字符串描述的地标除外,但我真的是 XSL 的新手,可能我做了一个粗略的错误。
这是 XSL 文件:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:kml="http://www.opengis.net/kml/2.2">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@*| node()"/>
</xsl:copy>
</xsl:template>
<!--placemarks to be deleted-->
<xsl:template match="kml:Placemark[kml:description = nodata]"/>
</xsl:stylesheet>
删除地标的关键条件是
<xsl:template match="kml:Placemark[kml:description = nodata]"/>
这样,地标“Site 1”应该被删除,地标“Site 2”应该被保留。但结果是 KML 中的两个地标都被删除了。
你能帮我设置 XSL 吗?提前致谢。
改变这个:
<xsl:template match="kml:Placemark[kml:description = nodata]"/>
至:
<xsl:template match="kml:Placemark[kml:description = 'nodata']"/>
我正在使用 Java 中的脚本来使用一些统计数据填充 KML 模板文件。完成此操作后,KML 文件运行良好,我可以在 GIS 或 Google Earth 上看到相关地图。统计数据存储在“描述”字段中。
无论如何,有时数据不可用,该字段由字符串“nodata”填充。我想设置一个 XSL 文件以删除带有“nodata”的整个地标,编写一个新的 KML 文件,仅由数据可用的地标制作。 KML 的结构如下。
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document id="doc">
<Schema name="Geographic_Placemarks">
<SimpleField name="Description" type="string" />
<SimpleField name="x" type="string" />
<SimpleField name="y" type="string" />
</Schema>
<Folder>
<name>Geographic_Placemarks</name>
<Placemark>
<name>Site 1</name>
<description>nodata</description>
<Style>
<LineStyle>
<color>ff0000ff</color>
</LineStyle>
<PolyStyle>
<fill>0</fill>
</PolyStyle>
</Style>
<ExtendedData>
<SchemaData schemaUrl="#Geographic_Placemarks">
<SimpleData name="x">571750 </SimpleData>
<SimpleData name="y">4548250 </SimpleData>
</SchemaData>
</ExtendedData>
<Polygon>
<altitudeMode>clampToGround </altitudeMode>
<outerBoundaryIs>
<LinearRing>
<altitudeMode>clampToGround </altitudeMode>
<coordinates>11.1825432433631,45.6613329598511 11.1298128785963,45.7000370530753 11.1833198656477,45.6994951268141 11.1825432433631,45.6613329598511 </coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
<Placemark>
<name>Site 2</name>
<description>10</description>
<Style>
<LineStyle>
<color>ff0000ff</color>
</LineStyle>
<PolyStyle>
<fill>0</fill>
</PolyStyle>
</Style>
<ExtendedData>
<SchemaData schemaUrl="#Geographic_Placemarks">
<SimpleData name="x">575750</SimpleData>
<SimpleData name="y">4548250</SimpleData>
</SchemaData>
</ExtendedData>
<Polygon>
<altitudeMode>clampToGround</altitudeMode>
<outerBoundaryIs>
<LinearRing>
<altitudeMode>clampToGround</altitudeMode>
<coordinates>11.1825432433631,45.6613329598511 11.1833198656477,45.6994951268141 11.2337967406582,45.6989609013362 11.2329870100429,45.6607994408117 11.1825432433631,45.6613329598511 </coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
</Folder>
</Document>
</kml>
我已经尝试准备一个 XSL 文件来复制 KML 文件的所有行,但带有“nodata”字符串描述的地标除外,但我真的是 XSL 的新手,可能我做了一个粗略的错误。
这是 XSL 文件:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:kml="http://www.opengis.net/kml/2.2">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@*| node()"/>
</xsl:copy>
</xsl:template>
<!--placemarks to be deleted-->
<xsl:template match="kml:Placemark[kml:description = nodata]"/>
</xsl:stylesheet>
删除地标的关键条件是
<xsl:template match="kml:Placemark[kml:description = nodata]"/>
这样,地标“Site 1”应该被删除,地标“Site 2”应该被保留。但结果是 KML 中的两个地标都被删除了。
你能帮我设置 XSL 吗?提前致谢。
改变这个:
<xsl:template match="kml:Placemark[kml:description = nodata]"/>
至:
<xsl:template match="kml:Placemark[kml:description = 'nodata']"/>