我在XSL中有2个模板,我想在单个XSL文件中执行。 原始的XMLXSLT 1.0在另一个模板的结果上应用模板
<root>
<step1.alfa/>
<step1.bravo/>
<step1.charlie/>
<step1.delta/>
<step2.alfa/>
<step2.bravo/>
<step2.charlie/>
<step2.delta/>
这需要嵌套,然后重命名的元素名称。 但我无法弄清楚如何在1个单独的xslt中完成这2个模板。由于模板始终从原始的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>
第一模板是嵌套的步骤和第二个是重命名。我只显示一个,但我有一个需要重新命名的每个元素的模板。
<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个模板。
为什么你不让我们更容易,并发布你有两个模板。特别是因为不清楚可以有多少步骤。 –
@ michael.hor257k添加了它们,底部有两个我想合并的模板。目前我正在尝试使用xsl,如果在第一个模板的循环中。 –