xslt - xsl中的条件语句

标签 xslt

我在一个使用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
  • 0是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/

    相关文章:

    xslt - 将属性转换为 XSLT 1.0 中名称匹配的元素

    xml - 我可以在 xsl for-each 中使用 'and' 运算符吗?

    java - 在 Java 中安全地准备带有表情符号图标的字符串以进行 XML 和 XSLT 转换

    javascript - 从 XML 模式生成表单键

    xslt - 使用 XSLT 处理循环依赖

    xml - xslt 中文化特定值的总和

    xslt - 通过 XSLT 根据源 XML 中特定元素的连续出现向 XML 添加属性

    xslt - 基于计数的迭代或 XSL 中的复制。我该怎么做?

    .net - 如何使用 XSLT 删除属性值与给定值不同的节点?

    xslt - 使用 XSL 构建 HTML 表格