我正在使用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;的条件逻辑。字符串中的属性然后应用两次? (或其他什么?)
答案 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>