【问题标题】:XSLT 1.0: Can I re-use 'test' logic in mulitple if tests?XSLT 1.0:我可以在多个 if 测试中重用“测试”逻辑吗?
【发布时间】:2016-09-12 12:34:33
【问题描述】:

我正在使用 XSLT 1.0 生成 EXCEL(2003 格式)XML 文件输出。 我必须扫描输入文档两次(一次用于标题,一次用于数据);我不想处理 XML 中的所有输入元素,所以我有一个像这样的 'xsl:if' 构造:

<xsl:if test="name(.) != 'ID' and name(.) != 'LINE' and name(.) != 'VERSION' and name(.) !='EXTRA'">
        <ss:Cell><ss:Data ss:Type="{$excelType}"><xsl:value-of select="."/></ss:Data></ss:Cell>
</xsl:if>

由于在处理标头和数据时需要跳过相同的输入 - 我可以重复使用 if 的逻辑吗?目前我有两个相同的“if”语句,我必须保持同步。

也就是说:我可以将'test'属性的条件逻辑保存在一个字符串中,然后应用两次吗? (或者别的什么?)

【问题讨论】:

    标签: xslt


    【解决方案1】:

    没有上下文很难回答。一般来说,要重用某些东西,你把它放在一个变量中,例如:

    <xsl:variable name="my-nodes" select="some-node[name()!='ID' and name()!='LINE' and name()!='VERSION' and name()!='EXTRA']" />
    <xsl:apply-templates select="$my-nodes" mode="header"/>
    <xsl:apply-templates select="$my-nodes"/>
    

    在这里,您将有两个匹配some-node 的模板,其中一个模板的mode 属性设置为"header"

    或者:

    <xsl:variable name="my-nodes" select="some-node[name()!='ID' and name()!='LINE' and name()!='VERSION' and name()!='EXTRA']" />
    <xsl:for-each select="$my-nodes">
        <!-- header-->
    </xsl:for-each>
    <xsl:for-each select="$my-nodes">
        <!-- data-->
    </xsl:for-each>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 2011-10-07
      • 2014-01-03
      相关资源
      最近更新 更多