得到数组元素我有XSLT:XSLT通过ID
<xsl:template match="/">
<!--<FLC_OKVEDCODE>-->
<xsl:variable name="valArray" select="//NodeA | //NodeB | //NodeC"/>
<xsl:variable name="valResArray">
<result_value>TextA</result_value>
<result_value>TextB</result_value>
<result_value>TextC</result_value>
</xsl:variable>
<xsl:variable name="resArray" select="document('')//xsl:variable[@name= 'valResArray']/*"></xsl:variable>
<xsl:for-each select="$valArray">
<xsl:if test="string-length(normalize-space(text())) = 0">
<ERROR>
<Err1><xsl:value-of select="position()"></xsl:value-of></Err1>
<Err2><xsl:value-of select="$resArray[1]"></xsl:value-of></Err2>
<Err3><xsl:value-of select="$resArray[2]"></xsl:value-of></Err3>
<Err4><xsl:value-of select="$resArray[3]"></xsl:value-of></Err4>
<Err5><xsl:value-of select="$resArray[position()]"></xsl:value-of></Err5>
</ERROR>
</xsl:if>
</xsl:for-each>
<!--</FLC_>-->
</xsl:template>
它必须检查NodeA上,NodeB和NODEC如果它们是空的 - 创建错误XML。在我的测试节点B是空的,但结果是:
<ERROR>
<Err1>2</Err1>
<Err2>TextA</Err2>
<Err3>TextB</Err3>
<Err4>TextC</Err4>
<Err5>TextA</Err5>
</ERROR>
为什么Err5是TEXTA,如果位置()的返回2和$ resArray [2](在印刷)是TEXTB ??
问题是谓词改变了上下文 - $ resarray [position()]在'$ resarray'中的每个节点的上下文中评估'position()'谓词一次,而你想要做的是捕获_outer_上下文中的'position()'值('for-each')并在谓词中使用该值。正如你发现的,最简单的方法是使用一个变量。 –
数值谓词'[N]'等同于[[position()= N]',所以'[position()]'意味着[[position()= position()]'总是为真。 –