我在一个使用XSL中的if / or语句的站点上工作,并且对语言有点不熟悉,我不确定该如何完成:
如果[满足条件一]或[条件二被满足],则执行[ Action ],否则执行[替代 Action ]
谁能提供一些例子?
提前致谢!
最佳答案
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>
。每个XPath表达式都可以作为 bool(boolean) according to a set of rules求值。这些(大部分情况下)归结为“如果有东西->
true
” /“如果没有东西-> 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。)
关于xslt - xsl中的条件语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1159836/