へ/ XPathの-2.0XSLT-2.0:SaxonHE 9.7を使用して、現在のグループからの組み合わせの結果()1
マイXML:
<osm>
<node>
<tag k="fhrs:id" v="204258"/>
<tag k="name" v="King of Wessex"/>
</node>
<node>
<tag k="fhrs:id" v="139245"/>
<tag k="name" v="The Royal Oak"/>
</node>
<node>
<tag k="fhrs:id" v="204258"/>
<tag k="name" v="The Rising Sun"/>
</node>
etc...
</osm>
私はfhrs:id
のすべての重複値(v=
)を返しますよ
<xsl:template match="/">
<xsl:for-each-group select="/*/*/tag[@k='fhrs:id']" group-by="@v">
<xsl:apply-templates select="current-group() [current-group()[2]]"/>
</xsl:for-each-group>
</xsl:template>
出力をgeojson形式に変換しています。これには、最後の要素を除くすべての要素がカンマで終わる必要があります。他のルーチンでは、私はそれが最後であるかどうかをテストするためにこれを使用しました:
<xsl:template match="/*/*/tag">
{
...<snip>...
}<xsl:if test="position() < last()">,</xsl:if>
</xsl:template>
しかし、この場合にはxsl:apply-templates
は一度に2を渡しているので、他のすべての要素がにGeoJSON出力にカンマが含まれていません。
xsl:for-each-group
のすべての出力を1つにまとめてからxsl:apply-templates
に渡す方法がありますか、最終的な要素を見つける別の方法ですか? xsl:for-each-group
でもそれについての最良の方法はありますか?
私は変数/配列を使用するさまざまな方法を検討しましたが、請求書に適合しないようです。
私は以前これを試していましたが、 "1つ以上の項目のシーケンスが変数$ duplicates( 、 、...)の値として許可されていません" –
DaveF
@DaveF、申し訳ありません、タイプはシーケンスの 'element()*' –
last()が重複したものだけでなく** all ** fhrs:idの値の合計を返すことを除いて、うまくいきました。そこで、私は 'duplicates'変数を適用されたテンプレートに渡しました: ' \t \t \t \t \t XSL:適用-テンプレート> ' ので、それを使用: '} <のxsl:テスト= "位置()<数($複製)">、は '最高wqayにある場合? –
DaveF