我在一个网站上工作,在XSL中有一些if /或语句,并且对我不确定如何完成的语言有点不了解:
如果[符合一个条件]或[条件二符合],那么[行动]否则做[替代行动]
任何人都可以提供一些例子吗?
提前致谢!
答案 0 :(得分:41)
XSLT中的条件是一元“if”:
<xsl:if test="some Boolean condition">
<!-- "if" stuff (there is no "else" here) -->
</xsl:if>
或更像其他语言的switch语句:
<xsl:choose>
<xsl:when test="some Boolean condition">
<!-- "if" stuff -->
</xsl:when>
<xsl:otherwise>
<!-- "else" stuff -->
</xsl:otherwise>
</xsl:choose>
您可以根据自己的喜好选择<xsl:when>
个。{/ p>
每个XPath表达式都可以作为布尔值according to a set of rules进行求值。这些(在大多数情况下)归结为“如果有什么 - &gt; true
”/“如果没有 - &gt; false
”
false
false
(所以NaN
)false
false()
的结果为false
true
(最值得注意的是:'false'
为true
而'0'
为true
)编辑:当然有一种更先进(也更惯用)的方法来控制程序流程,以及模板匹配:
<xsl:template match="node[contains(., 'some text')]">
<!-- output X -->
</xsl:template>
<xsl:template match="node[not(contains(., 'some text'))]">
<!-- output Y -->
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates select=".//node" />
</xsl:template>
编写与特定节点匹配的模板并使用<xsl:apply-templates>
使XSLT处理器选择合适的模板优于编写复杂的<xsl:if>
或<xsl:choose>
结构。
以上示例等同于命令式样式:
<xsl:template match="/">
<xsl:for-each select=".//node">
<xsl:choose>
<xsl:when test="contains(., 'some text')">
<!-- output X -->
</xsl:when>
<xsl:when test="not(contains(., 'some text'))">
<!-- output Y -->
</xsl:when>
<xsl:choose>
<xsl:for-each>
</xsl:template>
XSLT初学者倾向于选择后者的形式以便熟悉,但是检查模板匹配而不是使用条件是值得的。 (也see。)
答案 1 :(得分:3)
XSL有<xsl:if>
,但您可能更关注<xsl:choose>
/ <xsl:when>
/ <xsl:otherwise>
序列。一些例子here(靠近底部)。也许:
<xsl:choose>
<xsl:when test="[conditionOne] or [conditionTwo]">
<!-- do [action] -->
</xsl:when>
<xsl:otherwise>
<!-- do [alternative action] -->
</xsl:otherwise>
</xsl:choose>
答案 2 :(得分:1)
一般if语句的语法是
<xsl:if test="expression">
...some output if the expression is true...
</xsl:if>
不确定XSL是否具有else条件,但您应该能够测试是否为true然后测试是否为false或反之。
答案 3 :(得分:0)
在这种情况下,您必须使用xsl:choose
。这就像使用if / else和else else一样。
<xsl:choose>
<xsl:when test="condition one or condition two">
<!-- action -->
</xsl:when>
<xsl:otherwise>
<!-- alternative action -->
</xsl:otherwise>
</xsl:choose>