XSLに1つのXSLファイルで実行する2つのテンプレートがあります。 元のXMLXSLT 1.0別のテンプレートの結果にテンプレートを適用する
<root>
<step1.alfa/>
<step1.bravo/>
<step1.charlie/>
<step1.delta/>
<step2.alfa/>
<step2.bravo/>
<step2.charlie/>
<step2.delta/>
これは、入れ子にして、要素名の名前を変更する必要があります。 しかし、私はどのようにこれらの2つのテンプレートを1つの単一のxsltで行うのか分かりません。テンプレートは常に元のxmlから始まります。
まず出力
<root>
<step>
<step1.alfa/>
<step1.bravo/>
<step1.charlie/>
<step1.delta/>
</step>
<step>
<step2.alfa/>
<step2.bravo/>
<step2.charlie/>
<step2.delta/>
</step>
第二の出力
<root>
<step>
<alfa/>
<bravo/>
<charlie/>
<delta/>
</step>
<step>
<alfa/>
<bravo/>
<charlie/>
<delta/>
</step>
まずテンプレートが巣にステップであり、第二には、それらの名前を変更することです。私は1つしか表示しませんが、名前を変更する必要があるすべての要素のテンプレートがあります。
<xsl:template match="Values" name="recursive-steps">
<xsl:param name="var" select="2"/>
<xsl:choose>
<xsl:when test="$var > 0">
<STEP>
<xsl:for-each select="node()[starts-with(name(), concat('step', $var))]">
<xsl:copy-of select="."/>
</xsl:for-each>
</STEP>
<xsl:call-template name="recursive-steps">
<xsl:with-param name="var" select="$var - 1"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:template>
<xsl:template match="*[substring(name(), string-length(name())-3) = 'alfa']">
<ALFA>
<xsl:apply-templates select="@*|node()" />
</ALFA>
</xsl:template>
ここに2つのテンプレートを追加しました。
あなたは私たちのためにそれを容易にし、あなたが持っている2つのテンプレートを投稿していないなぜあなたはEXSLTを使用する必要があります。特にいくつのステップがあるのかははっきりしていないので、特にそうです。 –
@ michael.hor257kそれらを追加しました。下部には、結合したい2つのテンプレートがあります。現在、私は最初のテンプレートのループ内にあれば、xslでそれをやろうとしています。 –