XSLT筛选异常:无法获取value属性值大于阈值的component节点
问题排查与解决方案
嘿,我来帮你搞定这个筛选问题~你的代码之所以没得到预期结果,主要有两个关键问题:
1. 属性值的类型不匹配(核心问题)
@value是XML属性,默认会被当作字符串类型处理。直接用字符串和数值$threshold比较时,会按照字符串的字典序来判断,而不是数值大小。比如虽然"5033"字符串看起来比"4000"大,但如果遇到类似"10000"和"4000"的情况,字符串比较会认为"10000"更小(因为第一个字符"1"<"4"),完全不符合数值比较的逻辑。
你需要把@value显式转换为数值类型后再比较,用number()函数就能实现这一点。
2. 不必要的转义与冗余表达式
- 你写的
&gt;是HTML转义后的>,但在XSLT的select属性中,直接写>或者使用XPath标准的gt运算符更合适,不需要额外转义。 self::node()是冗余的:$dataset已经是component节点的集合了,直接过滤节点即可,不需要再用self::node()来指代自身。
修正后的代码
<!-- 用gt运算符(XPath标准写法) --> <xsl:variable name="records" select="$dataset[number(@value) gt $threshold]"/> <!-- 或者用>,部分处理器也支持 --> <xsl:variable name="records" select="$dataset[number(@value) > $threshold]"/>
这样修改后,就能正确筛选出value属性数值大于4000的component节点,也就是你预期的Information Technology和NADCO。
内容的提问来源于stack exchange,提问作者Gert Kommer
相关产品推荐
相关产品推荐

