我使用的是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返回参数中给出的月份的天数。 我不明白我的代码有什么问题,你能帮帮我吗?
感谢。
答案 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]"/>
我不得不猜测你的代码看起来会导致错误,如果你还有问题,那么请发布导致错误的代码的确切行。