变得容易得多。
我正在更改一些XSLT,并尝试使用选择时有条件地设置变量。以前,该变量是完全设置的,没有条件。我无法弄清楚为什么。
以前是通过:
设置的 <xsl:variable name="fields" select="pubs:field[@name=normalize-space($elements)]" />
我试图使用以下方式设置$字段:
<xsl:variable name="fields">
<xsl:choose>
<xsl:when test="contains($elements, 'acceptance-date')">
<xsl:value-of select="pubs:field[@name=normalize-space($elements)]" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="pubs:field[@name=normalize-space($elements)]" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
我希望我的其余代码能够像以前一样继续,在实验时,我现在将其设置为现在(SELECT语句是相同的)。相反
<xsl:variable name="field_values" select="$fields/pubs:people/*|$fields/pubs:keywords/*|$fields/pubs:items/*|$fields/*[local-name()!='items' and local-name()!='keywords' and local-name()!='people']" />
我对XSLT/XPATH相对较新,所以我假设我很明显。
谢谢詹姆斯
您的示例显然不是真实的,因为条件的两个分支是相同的。但是在许多情况下,您可以这样做:
<xsl:variable name="x"
select="$nodes[contains($elements, 'acceptance-date')]
| $other-nodes[not(contains($elements, 'acceptance-date'))]"/>
考虑您是否真的想使用XSLT 1.0。使用XSLT 2.0或3.0。
您使用什么XSLT引擎?如果是MS-XSL,则可以尝试使用node-set()函数,例如
<xsl:variable name="fields">
<xsl:choose>
<xsl:when test="contains($elements, 'acceptance-date')">
<xsl:copy-of select="pubs:field[@name=normalize-space($elements)]" />
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="pubs:field[@name=normalize-space($elements)]" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="field_values" select="msxsl:node-set($fields)/pubs:field/pubs:people/*|msxsl:node-set($fields)/pubs:field/pubs:keywords/*|msxsl:node-set($fields)/pubs:field/pubs:items/*|msxsl:node-set($fields)/pubs:field/*[local-name()!='items' and local-name()!='keywords' and local-name()!='people']" />
还将命名空间声明添加到XSLT的根元素:
xmlns:msxsl="urn:schemas-microsoft-com:xslt"