2017-03-22 6 views
0

私はXSLT初心者です。次のKMLファイルを編集したいと思います。XSLT説明値に基づいて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>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> 

具体的には、説明値に基づいて各目印のスタイル部分を修正したいと考えています。説明値が23である場合、私は、このようにスタイルの一部を代用したいと思います:

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

そうでない場合は記述値が10である場合には、私は、このようにスタイルの一部を置換するしたいと思います:

言い換えれば
<LineStyle> 
    <color>ff0000ff</color> 
</LineStyle> 
<PolyStyle> 
    <fill>1</fill> 
    <color>#ffff99</color> 
</PolyStyle> 

私はあなたがXSLのセットアップで私を助けることができるしてください説明値

に基づいてKMLのレイアウトを変更したいのですが?前もって感謝します。

EDITあなたの提案に従うために、私はxsltファイルを含めましたが、うまく構成されていません。私が言ったように、私はXSLTにあまり熟練していません。

+0

正確にこれにこだわっていますか? - また、23と10は唯一の可能な値ですか?そうでない場合、値がこれらのどちらでもない場合、何が起こるはずですか? –

+0

これを行うxsltファイルを書くために、例題から数回試しましたが、この問題を解決するための言語の基本的なステートメントの知識はありません。私はその文字列( '23'と '10')をxslt構造体を理解するための最初の単純で一般的なアプローチのためだけに入れましたが、一般的に対応する数値変換値を評価する方法を理解することも興味深いかもしれません。たとえば、(数値で変換された)説明値が25と50の間であるかどうかを評価する方法です。忍耐のためにthx – Thaunes

+0

最初からあなたのコードを書く必要はなく、修正できるように、あなたの試みを投稿してください。 –

答えて

0

大きな選択/ブロックではなく、変更が必要な部分だけを置き換える個別のテンプレートをお勧めします。たとえば:あなたはその要素にマッチするテンプレートを書くことができPolyStyleあなただけ実際に変更している場合

<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> 

もちろんこれは、たとえば、さらに洗練することができます。

関連する問題