XSL for-each select子句数值大小条件筛选结果异常问题
问题原因
你的XPath筛选逻辑失效有两个核心原因:
- 你将PRICE的值和字符串
'100'、'50'做比较,XPath中带引号的内容会被识别为字符串,字符串的字典排序规则和数字完全不同,比如字符串'90'的首字符9比'100'的首字符1大,就会判定'90' > '100'为真,导致价格为90的商品也被错误匹配到筛选条件。 - 相对路径
.//PRICE是递归查找所有后代节点的PRICE,如果单个Product下存在多个PRICE节点,只要有任意一个满足条件就会匹配,如果你确认每个Product下只有一个PRICE节点,这个点可以暂时不调整,写全明确路径会更稳妥。
修复后的代码
把比较值的引号去掉,转为数字比较即可,修复后的for-each代码如下:
<xsl:for-each select=".//G_1/Product[.//PRICE > 100 or .//PRICE < 50 ]"><?PRICE?></xsl:for-each>
如果要更严谨避免多PRICE节点的匹配问题,可以写全明确路径:
<xsl:for-each select=".//G_1/Product[Rec/Rec1/Rec_Detail/PRICE > 100 or Rec/Rec1/Rec_Detail/PRICE < 50 ]"><?PRICE?></xsl:for-each>
按照你给出的XML示例,修复后只会匹配到价格为200的第一个商品,价格为90的第二个商品会被正确过滤。
内容的提问来源于stack exchange,提问作者user1660680
相关产品推荐
相关产品推荐

