2017-03-05 70 views
0

我在迭代XSLT中的键值时遇到问题。我有这样一行:尝试基于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

你有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">... 
+0

我更新了我的代码中的错误。 – ttdol2506