对于XPath中的多个条件,是否有比使用position()更简洁的方法?
在XPath中,可以使用对于XPath中的多个条件,是否有比使用position()更简洁的方法?,xpath,Xpath,在XPath中,可以使用*[position()=1或position()=last()]获取第一个和最后一个匹配节点。但是,如果只需要第一个或最后一个节点,则可以分别使用*[1]或*[last()]。尝试使用类似于*[1或last()]的方法会选择所有节点。有没有更简洁的方式加入条件?简短回答:没有。没有比[position()=1或position()=last()]更简洁的方法对此有意义 关于您尝试的该谓词[1或last()]: 数字0转换为布尔值False,其余转换为True last
*[position()=1或position()=last()]
获取第一个和最后一个匹配节点。但是,如果只需要第一个或最后一个节点,则可以分别使用*[1]
或*[last()]
。尝试使用类似于*[1或last()]
的方法会选择所有节点。有没有更简洁的方式加入条件?简短回答:没有。没有比[position()=1或position()=last()]
更简洁的方法对此有意义
关于您尝试的该谓词[1或last()]
:
- 数字
转换为布尔值0
,其余转换为False
李>True
返回上下文中最后一个元素的位置索引last()
根据以上规则,此类谓词表达式
[1或last()]
始终转换为[True或True]
,其计算结果为True
,这就是为什么所有节点都使用此谓词。谢谢。但是,我确实设法把它缩短了一点:*[1]|*[last()]
@丹尼斯:是的,我知道这个把戏,在这种特殊情况下,这个把戏肯定要短一些。通过像这样使用union(|
)操作符,您需要重复谓词之前的所有操作,因此随着路径变深,整个表达式长度将加倍。CMIIW