XSLT1.0按Level分组Itemno求助:key未绑定错误排查
XSLT key "not bound" 错误排查与解决
错误原因
XSLT规范要求<xsl:key>的name属性必须唯一,你重复定义了两个名为s1的key,解析器无法识别重复的key名称,因此抛出“key not bound”错误。
解决方案
有两种可行的修正方式:
方式一:给不同Level的key分配唯一名称
将两个key的name分别设置为不同值,比如:
<xsl:key name="s1-level1" match="Material[Level='1']" use="concat(Label ,'|', Itemno)" /> <xsl:key name="s1-level2" match="Material[Level='2']" use="concat(Label ,'|', Itemno)" />
后续使用key时,分别调用对应的名称即可。
方式二:合并match条件,将Level纳入分组键
如果需要统一处理Level1和Level2的分组,可以把Level也加入到分组键的组合中,只定义一个key:
<xsl:key name="s1" match="Material[Level='1' or Level='2']" use="concat(Level, '|', Label ,'|', Itemno)" />
这样分组会自动按Level+Label+Itemno的组合进行区分,调用key时传入对应的组合值即可。
额外检查点
确认Material节点下确实存在Label子节点,如果Label不存在,concat的结果会包含空值,可能导致分组异常。
内容的提问来源于stack exchange,提问作者Akash
相关产品推荐
相关产品推荐

