ファイルパス(例:/ dir1/dir2/dir3)を含む属性をトークン化したので、今は文字列の配列(またはノードセット?)を持っています。XSLT:文字列の配列で次の兄弟を使用していますか?
私は最初のアイテムを再帰的に処理し、残りの部分を渡したいと思います。これを 'following-sibling'軸を使用して実現したいと考えていました。しかし、文字列だけではなく、実際の要素を期待していることが分かります。私は現在、想像
<xsl:template match="s:universe">
<xsl:call-template name="createSubFolder">
<xsl:with-param name="folderNames" select="tokenize(@path, '/')" />
</xsl:call-template>
</xsl:template>
<xsl:template name="createSubFolder">
<xsl:param name="folderNames" />
<xsl:if test="count($folderNames) > 0">
<folder>
<xsl:attribute name="name" select="$folderNames[1]" />
<xsl:if test="position() < count($folderNames)">
<folder>
<xsl:call-template name="createSubFolder">
<xsl:with-param name="folderNames" select="$folderNames[1]/following-sibling::text()" />
</xsl:call-template>
</folder>
</xsl:if>
</folder>
</xsl:if>
</xsl:template>
唯一の解決策は、テンプレートへの配列のテールエンドを供給するカスタム関数を作成することになる - しかし、私は/より良い方法がなければならないことができると感じています。
トークン化 'で(@path、「/」)'あなたは文字列のシーケンスを取得し、あなたはその後、再帰的に処理する場合あなたは、(XPath 3) 'tail($ folderNames)'や '$ folderNames [position()gt 1]'(XPath 2)でtailを使用するのは正しいです。 –
@MartinHonnen:テールが存在していなかった。それを与えるだろう! – morsor
http://maxtoroq.github.io/xpath-ref/にブックマークします。 –