令牌化变量上for-each的上下文错误

时间:2014-02-19 08:44:15

标签: xslt xslt-2.0 tokenize

我使用的是XSLT 2.0,并且包含一个以逗号分隔的日期的变量。我尝试在for-each中对此变量进行标记,但在执行中,我有错误:“无法在此处选择节点:上下文项是原子值”

这是我的代码:

<xsl:variable name="datesMois">
    <xsl:call-template name="dayOfMonth">
        <xsl:with-param name="pDay" select="01" />
        <xsl:with-param name="pMonth" select="/workfile/query/@month" />
        <xsl:with-param name="pYear" select="/workfile/query/@year" />          
    </xsl:call-template>
</xsl:variable>
<xsl:variable name="currentstartdate" select="substring-before(., 'T')" />
<xsl:for-each select="tokenize($datesMois,',')">
    <xsl:variable name="dateJour" select="." />
...

模板dayOfMonth返回参数中给出的月份的天数。 我不明白我的代码有什么问题,你能帮帮我吗?

感谢。

1 个答案:

答案 0 :(得分:0)

假设您有类似

的内容
<xsl:variable name="datesMois">
    <xsl:call-template name="dayOfMonth">
        <xsl:with-param name="pDay" select="01" />
        <xsl:with-param name="pMonth" select="/workfile/query/@month" />
        <xsl:with-param name="pYear" select="/workfile/query/@year" />          
    </xsl:call-template>
</xsl:variable>
<xsl:variable name="currentstartdate" select="substring-before(., 'T')" />
<xsl:for-each select="tokenize($datesMois,',')">
    <xsl:variable name="dateJour" select="." />
    <xsl:value-of select="foo[date = $dateJour]"/>

你会得到你描述的错误,以避免你需要将for-each之外的上下文节点存储在变量中,如

<xsl:variable name="datesMois">
    <xsl:call-template name="dayOfMonth">
        <xsl:with-param name="pDay" select="01" />
        <xsl:with-param name="pMonth" select="/workfile/query/@month" />
        <xsl:with-param name="pYear" select="/workfile/query/@year" />          
    </xsl:call-template>
</xsl:variable>
<xsl:variable name="currentstartdate" select="substring-before(., 'T')" />

<xsl:variable name="context" select="."/>

<xsl:for-each select="tokenize($datesMois,',')">
    <xsl:variable name="dateJour" select="." />
    <xsl:value-of select="$context/foo[date = $dateJour]"/>

我不得不猜测你的代码看起来会导致错误,如果你还有问题,那么请发布导致错误的代码的确切行。