XSLT "Choose-When"设置变量给出不同的结果



我正在更改一些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"

相关内容

  • 没有找到相关文章

最新更新