这里不能使用axis step child::element:上下文项是一个原子值
Axis step child::element cannot be used here: the context item is an atomic value
我不确定为什么在我的 XSLT 中收到以下错误:
Axis step child::element(_SetMax42, xs:anyType) cannot be used here:
the context item is an atomic value
似乎在 xsl:when
条件下使用计数似乎导致了它,但我不明白为什么或如何解决这个问题以获得我需要的东西。
<xsl:variable name='_LoopVar_102_0_set' select="$_ManageWorkOrderSubmitWorkOrderRequest/soapenv:Envelope[1]/soapenv:Body[1]/bons1:ManageWorkOrderSubmitWorkOrderRequest[1]/WorkOrder[1]/CustomerAccount[1]/ServiceAddress[1]/LineCardInfo[1]/Cable"/>
<xsl:variable name='_LoopVar_102_1_set' select="$_LoopVar_100_0/Cable"/>
<xsl:variable name='_SetMax42r'>
<xsl:choose>
<xsl:when test="count($_LoopVar_102_0_set) >= count($_LoopVar_102_1_set)">
<xsl:apply-templates select="$_LoopVar_102_0_set" mode='enumerate'/>
</xsl:when>
<xsl:when test="count($_LoopVar_102_1_set) >= count($_LoopVar_102_0_set)">
<xsl:apply-templates select="$_LoopVar_102_1_set" mode='enumerate'/>
</xsl:when>
</xsl:choose>
</xsl:variable>
<xsl:variable name='_SetMax42' select="$_SetMax42r/*"/>
<xsl:variable name='count2'>
<xsl:choose>
<xsl:when test='count(_SetMax42) = 0'>
<xsl:value-of select="1"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select='count(_SetMax42)'/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:for-each select="1 to $count2">
<xsl:variable name="_index43" select='$count2'/>
<xsl:variable name='_LoopVar_102_0' select="$_LoopVar_102_0_set[position()=$_index43]"/>
<xsl:variable name='_LoopVar_102_1' select="$_LoopVar_102_1_set[position()=$_index43]"/>
而不是
count(_SetMax42)
使用
count($_SetMax42)
...尽管您可能在其他地方有另一种类似的错误,因为仅此并不能完全解释您的错误消息。
Update:正如 Michael Kay 在评论中指出的那样,如果此时上下文项是原子值,则单独进行上述修复可能就足够了。如果没有 $
,_SetMax42
将被视为上下文项的子元素,并且 count()
将 return 0 如果上下文项是一个节点但失败如果它是原子值,则给出错误消息。使用 $
,$_setMax42
将不依赖于上下文项,添加 $
可能单独解决您的问题。
我不确定为什么在我的 XSLT 中收到以下错误:
Axis step child::element(_SetMax42, xs:anyType) cannot be used here: the context item is an atomic value
似乎在 xsl:when
条件下使用计数似乎导致了它,但我不明白为什么或如何解决这个问题以获得我需要的东西。
<xsl:variable name='_LoopVar_102_0_set' select="$_ManageWorkOrderSubmitWorkOrderRequest/soapenv:Envelope[1]/soapenv:Body[1]/bons1:ManageWorkOrderSubmitWorkOrderRequest[1]/WorkOrder[1]/CustomerAccount[1]/ServiceAddress[1]/LineCardInfo[1]/Cable"/>
<xsl:variable name='_LoopVar_102_1_set' select="$_LoopVar_100_0/Cable"/>
<xsl:variable name='_SetMax42r'>
<xsl:choose>
<xsl:when test="count($_LoopVar_102_0_set) >= count($_LoopVar_102_1_set)">
<xsl:apply-templates select="$_LoopVar_102_0_set" mode='enumerate'/>
</xsl:when>
<xsl:when test="count($_LoopVar_102_1_set) >= count($_LoopVar_102_0_set)">
<xsl:apply-templates select="$_LoopVar_102_1_set" mode='enumerate'/>
</xsl:when>
</xsl:choose>
</xsl:variable>
<xsl:variable name='_SetMax42' select="$_SetMax42r/*"/>
<xsl:variable name='count2'>
<xsl:choose>
<xsl:when test='count(_SetMax42) = 0'>
<xsl:value-of select="1"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select='count(_SetMax42)'/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:for-each select="1 to $count2">
<xsl:variable name="_index43" select='$count2'/>
<xsl:variable name='_LoopVar_102_0' select="$_LoopVar_102_0_set[position()=$_index43]"/>
<xsl:variable name='_LoopVar_102_1' select="$_LoopVar_102_1_set[position()=$_index43]"/>
而不是
count(_SetMax42)
使用
count($_SetMax42)
...尽管您可能在其他地方有另一种类似的错误,因为仅此并不能完全解释您的错误消息。
Update:正如 Michael Kay 在评论中指出的那样,如果此时上下文项是原子值,则单独进行上述修复可能就足够了。如果没有 $
,_SetMax42
将被视为上下文项的子元素,并且 count()
将 return 0 如果上下文项是一个节点但失败如果它是原子值,则给出错误消息。使用 $
,$_setMax42
将不依赖于上下文项,添加 $
可能单独解决您的问题。