我在迭代XSLT中的键值时遇到问题。我有这条线:
<xsl:key name="group" match="Orders" use="number" />
之后:
<xsl:variable name="orderNodes">
<xsl:copy-of select="key('group', number)" />
</xsl:variable>
我正在尝试迭代:
<xsl:for-each select="$orderNodes/Orders">
<xsl:value-of select="number" />
</xsl:for-each>
但是我收到了一个错误:
ERROR: 'Could not compile stylesheet'
FATAL ERROR: 'Could not compile stylesheet'
:Error checking type of the expression 'FilterParentPath(variable-ref(groupNodes/result-tree), step("child", 14))'.
javax.xml.transform.TransformerConfigurationException: Could not compile stylesheet
我做错了吗?
答案 0 :(得分:0)
你有xsl:variable name="orderNodes"
但是你尝试使用$group
没有意义。
至于使用变量,首先要考虑你是否真的需要一个副本,或者不能只选择输入节点。 <xsl:variable name="group" select="key('group', number)"/>
,然后使用例如$group/number
应该可以使用任何版本的XSLT和任何XSLT处理器而不会出错。
如果您确实需要原始代码中的副本,请注意使用XSLT 1.0处理器创建结果树片段,然后需要先将其转换为节点集以便能够在其中选择节点:
<xsl:variable name="group-rtf">
<xsl:copy-of select="key('group', number)" />
</xsl:variable>
<xsl:variable name="group" select="exsl:node-set($group-rtf)" xmlns:exsl="http://exslt.org/common"/>
<xsl:for-each select="$group/Orders/number">...