XSLT 1.0:我可以重复使用'测试'如果测试,多个逻辑?

时间:2016-09-12 12:34:34

标签: xslt

我正在使用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的逻辑吗?目前我有两个相同的&#39; if&#39;我必须保持同步的陈述。

那就是:我可以保持&#39;测试&#39;的条件逻辑。字符串中的属性然后应用两次? (或其他什么?)

1 个答案:

答案 0 :(得分: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>