Tom*_*lak 41
XSLT中的条件是一元"if":
<xsl:if test="some Boolean condition">
<!-- "if" stuff (there is no "else" here) -->
</xsl:if>
Run Code Online (Sandbox Code Playgroud)
或者更像是其他语言的switch语句:
<xsl:choose>
<xsl:when test="some Boolean condition">
<!-- "if" stuff -->
</xsl:when>
<xsl:otherwise>
<!-- "else" stuff -->
</xsl:otherwise>
</xsl:choose>
Run Code Online (Sandbox Code Playgroud)
哪里有<xsl:when>你想要的空间.
根据一组规则,可以将每个XPath表达式计算为布尔值.这些(在大多数情况下)归结为"如果有什么 - > true"/"如果没有 - > false"
falsefalse(所以NaN)falsefalse()是falsetrue(最值得注意的是:'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>
Run Code Online (Sandbox Code Playgroud)
编写匹配特定节点并使用<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>
Run Code Online (Sandbox Code Playgroud)
XSLT初学者倾向于选择后者的形式以便熟悉,但是检查模板匹配而不是使用条件是值得的.(也见.)
| 归档时间: |
|
| 查看次数: |
51692 次 |
| 最近记录: |