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']"/>