我有一个xml文件,其中包含一些属于创建的图表的信息。我可以用xslt提取我想要的所有变量。要将它们打印到另一个文件,我调用不同的模板并将变量发送给它: 例如,我的主xslt文件中的一些代码:
<xsl:call-template name="HostDefine">
<xsl:with-param name="variable1" select="@value1"/>
<xsl:with-param name="variable2" select="path/node/@value2"/>
<xsl:with-param name="variable3" select="path/node/@value3"/>
<xsl:with-param name="variable4" select="@value4"/>
<xsl:with-param name="variable5" select="@value5"/>
<xsl:with-param name="variable6">value6</xsl:with-param>
</xsl:call-template>
在大多数模板中,我有超过6个参数。
我在另一个xsl文件中调用模板,如下所示:
<xsl:template name="HostDefine">
<xsl:param name="Variable1"/>
<xsl:param name="Variable2"/>
<xsl:param name="Variable3"/>
<xsl:param name="Variable4"/>
<xsl:param name="Variable5"/>
<xsl:param name="Variable6"/>
</xsl:template>
现在关闭模板之前我想以这种方式将所有变量打印到新文件中:
o=<xsl:value-of select="$Variable1"/>
p=<xsl:value-of select="$Variable2"/>
q=<xsl:value-of select="$Variable3"/>
r=<xsl:value-of select="$Variable4"/>
s=<xsl:value-of select="$Variable5"/>
t=<xsl:value-of select="$Variable6"/>
这就是我的结构。我现在的问题是,这些变量中的一些可能是空的。每当它们都是空的时候就不应该打印出来(也不是&#34; o = / p = / q = / ...&#34;。所以如果变量有值,我需要在模板内的某处询问或者如果它是空的(空=&#39;&#39;)。
首先,我想用&#34; for-each&#34;来做,但我认识到我只能用节点来做。我想过一种for循环(或者在xslt中增量调用),但是我不能遍历不同的参数。因此,我现在看到的唯一方法是在每个变量之前进行一次if调用,以查看它是否为空。但有时在一个模板中有超过20个变量和大约10个模板,这将是一个非常大的事情。还有更优雅/更好的方法吗?
答案 0 :(得分:0)
如果我们讨论的是在XSLT 1.0中传递节点集,那么你可以声明<xsl:param name="param-name" select="/.."/>
以确保默认值是一个空节点集然后你可以检查
<xsl:if test="$param-name">
... = <xsl:value-of select="$param-name"/>
</xsl:if>
检查是否已传递非空节点集。
这种方法适用于您使用select
属性定义传递参数值的前五个示例,其中XPath表达式选择节点。
对于带有<xsl:with-param name="variable6">value6</xsl:with-param>
的示例,您传递的结果树片段从不为空,因此boolean($variable6)
检查不适用于该方法。