xsl - 多个xsl:如果条件相同

时间:2010-06-11 10:38:58

标签: xslt if-statement

关于xslt的新手问题。我有多个xsl:if if

<xsl:if test="node/node1"> ...</xsl:if>
...
<xsl:if test="node/node1"> ...</xsl:if>
...
<xsl:if test="node/node1"> ... </xsl:if>

有没有办法参数化测试条件,使代码更易读和易于维护?也许使用变量或类似的东西

<xsl:variable name="node1Present" select="true()"/>
<xsl:if test="$node1Present"> ... </xsl:if>

我不明白如何构造变量以反映'测试节点存在'(test =“node / node1”)

3 个答案:

答案 0 :(得分:2)

<xsl:variable name="node1Present" select="boolean(node/node1)"/>

对于节点集,boolean()转换为true,当且仅当节点集不为空时。

答案 1 :(得分:2)

在XPath中,任何返回truthy(即非空)值的表达式在布尔上下文中都被视为true

<xsl:variable name="node1Present" select="node/node1"/>
<xsl:if test="$node1Present"> ... </xsl:if>

不是尝试会让世界爆炸。 ; - )

答案 2 :(得分:0)

除了到目前为止的正确答案,我建议进行以下重构:

<强>替换

<xsl:if test="node/node1"> ...</xsl:if> 
... 
<xsl:if test="node/node1"> ...</xsl:if> 
... 
<xsl:if test="node/node1"> ... </xsl:if>

<强>与

<xsl:if test="node/node1"> ...</xsl:if> 
... 

或与:

... 
<xsl:if test="node/node1"> ... </xsl:if>

也就是说,将所有依赖于条件的代码放在一个<xsl:if>中。

如果您能够呈现无法以这种方式重构的代码,那将非常有趣。 :)