スペースで区切られた座標タプルのリストがあり、任意の数のタプルがあります。各タプルは、2次元座標のスペースで区切られたリストで構成されています。たとえば、「1.1 2.8 1.2 2.9」は、POINT(1.1 2.8)からPOINT(1.2 2.9)までの線を表します。代わりに「1.1,2.81.2,2.9」にする必要があります。XSLTを使用して、数値のペア間のスペースからコンマへの置換を実行するにはどうすればよいですか?「string(gml:LinearRing / gml:posList)」があります。
これは、ジオメトリを使用してGML3.1.1機能を吐き出すJavaWebサービスで使用されています。このサービスは、XSLTを使用してGMLドキュメントをKMLドキュメント(少なくとも「重要」と見なされるチャンク)に変換することにより、オプションのKML出力をサポートします。XSLT 1.0にロックされているため、XSLT2.0からの正規表現はオプションではありません。
GMLはlat/lonを使用し、KMLはlon/latを使用することを知っています。これはXSLTの前に処理されていますが、XSLTでも処理されると便利です。
あなたの解決策をありがとう、ディミトレ。自分のニーズに合わせて少し変更したので、他の人に役立つ場合に備えて、ここに含めます。2次元のタプルを想定して、座標リストを介して再帰を実行します。
これは2つの機能を実行します。軸の交換(GMLおよびKML仕様によるlon/latのlat/lon)と、各タプル内の座標区切り文字をスペース''からコンマ'、'に変更します。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:gml="http://www.opengis.net/gml" exclude-result-prefixes="gml">
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<!-- other portions omitted -->
<xsl:template match="gml:pos">
<xsl:call-template name="coordinateSequence">
<xsl:with-param name="coords" select="normalize-space(string(.))" />
</xsl:call-template>
</xsl:template>
<xsl:template match="gml:posList">
<xsl:call-template name="coordinateSequence">
<xsl:with-param name="coords" select="normalize-space(string(.))" />
</xsl:call-template>
</xsl:template>
<xsl:template name="coordinateSequence">
<xsl:param name="coords" />
<xsl:if test="string-length($coords) > 0">
<xsl:variable name="lat" select="substring-before($coords, ' ')" />
<xsl:variable name="lon">
<xsl:value-of select="substring-before(substring-after($coords, ' '), ' ')" />
<xsl:if test="string-length(substring-before(substring-after($coords, ' '), ' ')) = 0">
<xsl:value-of select="substring-after($coords, ' ')" />
</xsl:if>
</xsl:variable>
<xsl:variable name="remainder" select="substring-after(substring-after($coords, ' '), ' ')" />
<xsl:value-of select="concat($lon, ',', $lat)" />
<xsl:if test="string-length($remainder) > 0">
<xsl:value-of select="' '" />
<xsl:call-template name="coordinateSequence">
<xsl:with-param name="coords" select="$remainder" />
</xsl:call-template>
</xsl:if>
</xsl:if>
</xsl:template>
</xsl:stylesheet>