关于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”)
答案 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>
中。
如果您能够呈现无法以这种方式重构的代码,那将非常有趣。 :)