尝试基于XSLT中的键迭代一组元素

时间:2017-03-05 20:32:22

标签: xml 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

我做错了吗?

1 个答案:

答案 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">...