我希望在下面构建以下xsl结构:
<body>
<item></item>
<item></item>
<item></item>
</body>
body节点之间的项目数是可变的,所以我想调用带有param'place'的模板,其中如果值是start或end,则分别创建或关闭body节点。基本代码结构如下。我遇到的问题是,由于在关闭when语句时无法打开节点,因此无法使用此方法。如何覆盖xsl编译器的这种行为
<xsl:choose>
<xsl:when test="$place='start'">
<body>
</xsl:when>
<xsl:when test="$place='end'">
</body>
</xsl:when>
</xsl:choose>
答案 0 :(得分:1)
我想调用带有param'place'的模板,如果值是 分别创建或关闭身体节点的开始或结束
这是不可能的。您不能在XSLT中使用错误的嵌套标记(就像您不能在任何其他编程语言中使用错误的嵌套大括号/括号/控制结构一样)。
幸运的是,这也是完全没必要的。这将做你想要的:
<xsl:template match="body">
<body>
<xsl:apply-templates select="item" />
</body>
</xsl:template>
<xsl:template match="item">
<!-- whatever you want to do with the items -->
</xsl:template>
答案 1 :(得分:0)
你需要这样的东西:
<xsl:param name="tot" select="3"/>
<xsl:template match="body">
<body>
<xsl:call-template name="add-items" />
</body>
</xsl:template>
<xsl:template name="add-items">
<xsl:param name="num" select="1"/>
<item />
<xsl:if test="$num < $tot">
<xsl:call-template name="add-items">
<xsl:with-param name="num" select="$num + 1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
答案 2 :(得分:0)
XSLT不会“创建”和“关闭”节点作为单独的操作:您不能做一个而不能做另一个。它构建了一个结果树,一个节点或者存在于结果树中,或者不存在。当您需要考虑节点树时,您正在考虑标记。