2017-03-22 1 views
0

Ich bin ein XSLT-Neuling und ich möchte die folgende KML-Datei bearbeiten.XSLT wie KML zu bearbeiten Placemark Stil basierend auf Beschreibung Wert

<?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>23</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> 

Insbesondere möchte ich den Stil Teil jeder Ortsmarke, basierend auf der Beschreibung Wert ändern. wenn die Beschreibung Wert 23 würde Ich mag den Stil Teil auf diese Weise ersetzen:

<LineStyle> 
    <color>ff0000ff</color> 
</LineStyle> 
<PolyStyle> 
    <fill>0.5</fill> 
    <color>ff0000ff</color> 
</PolyStyle> 

Ansonsten, falls die Beschreibung Wert 10 Ich mag würde, um den Stil Teil auf diese Weise zu ersetzen:

<LineStyle> 
    <color>ff0000ff</color> 
</LineStyle> 
<PolyStyle> 
    <fill>1</fill> 
    <color>#ffff99</color> 
</PolyStyle> 

mit anderen Worten würde ich mag die KML-Layout auf der Beschreibung Wert basierend ändern

Bitte können Sie mir in der XSL-Setup helfen? Danke im Voraus.

EDIT Um Ihren Vorschlägen zu folgen, habe ich die Xslt-Datei hinzugefügt, aber es ist nicht gut geformt. Wie gesagt, ich bin nicht so gut in XSLT.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:kml="http://www.opengis.net/kml/2.2"> 

<xsl:output indent="yes"/> 
<xsl:strip-space elements="*"/> 

    <xsl:template match="@* | node()"> 
    <xsl:for-each select="kml:Placemark"> 
    <xsl:variable name="Value" select="@description"/> 
     <xsl:when test="$Value = '10'"> 
     <xsl:element name="$Style"> 

     <LineStyle> 
      <color>ff0000ff</color> 
      </LineStyle> 
      <PolyStyle> 
      <fill>1</fill> 
      <color>#ffff99</color> 
      </PolyStyle> 

     </xsl:element> 
     </xsl:when> 

    </xsl:for-each> 
    <xsl:copy> 
    <xsl:apply-templates select="@*| node()"/> 
    </xsl:copy> 
</xsl:template> 
</xsl:stylesheet> 
+0

Wo genau stecken Sie fest? - Sind 23 und 10 die einzig möglichen Werte? Wenn nicht, was sollte passieren, wenn der Wert keiner von beiden ist? –

+0

Ich habe mehrere Male aus den Beispielen online versucht, eine XSLT-Datei zu schreiben, dies zu tun, aber ich habe nicht die Kenntnis der grundlegenden Aussagen der Sprache, um dieses Problem zu erreichen. Ich habe diese Strings ('23' und '10') nur für einen ersten einfachen und allgemeinen Ansatz eingefügt, um die xslt-Struktur zu verstehen, könnte aber auch interessant sein, um zu verstehen, wie man die entsprechenden konvertierten Werte im Allgemeinen auswertet. So zum Beispiel, wie man bewertet, wenn der Beschreibungswert (in Zahl umgerechnet) zwischen 25 und 50 liegt. Danke für die Geduld – Thaunes

+0

Veröffentlichen Sie Ihren Versuch, damit wir es beheben können, anstatt Ihren Code von Grund auf neu schreiben zu müssen. –

Antwort

0

Anstatt eine große Auswahl/wenn Block I einzelne Vorlagen empfehlen nur die Teile zu ersetzen, die geändert werden müssen. Zum Beispiel:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" 
       xmlns:kml="http://www.opengis.net/kml/2.2"> 
    <xsl:output method="xml"/> 

    <!-- identity template copies nodes unchanged --> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <!-- matches Style with sibling of description='23' --> 
    <xsl:template match="kml:Style[../kml:description='23']"> 
     <Style> 
      <LineStyle> 
       <color>ff0000ff</color> 
      </LineStyle> 
      <PolyStyle> 
       <fill>0.5</fill> 
       <color>ff0000ff</color> 
      </PolyStyle> 
     </Style> 
    </xsl:template> 

    <!-- matches Style with sibling of description='10' --> 
    <xsl:template match="kml:Style[../kml:description='10']"> 
     <Style> 
      <LineStyle> 
       <color>ff0000ff</color> 
      </LineStyle> 
      <PolyStyle> 
       <fill>1</fill> 
       <color>#ffff99</color> 
      </PolyStyle> 
     </Style> 
    </xsl:template> 

</xsl:stylesheet> 

Dies könnte natürlich weiter verfeinert werden, zum Beispiel, wenn Sie eigentlich nur Polystyle ändern können Sie die Vorlagen schreiben, um dieses Element anzeigen zu lassen.

Verwandte Themen