Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于XPath中的多个条件,是否有比使用position()更简洁的方法?_Xpath - Fatal编程技术网

对于XPath中的多个条件,是否有比使用position()更简洁的方法?

对于XPath中的多个条件,是否有比使用position()更简洁的方法?,xpath,Xpath,在XPath中,可以使用*[position()=1或position()=last()]获取第一个和最后一个匹配节点。但是,如果只需要第一个或最后一个节点,则可以分别使用*[1]或*[last()]。尝试使用类似于*[1或last()]的方法会选择所有节点。有没有更简洁的方式加入条件?简短回答:没有。没有比[position()=1或position()=last()]更简洁的方法对此有意义 关于您尝试的该谓词[1或last()]: 数字0转换为布尔值False,其余转换为True last

在XPath中,可以使用
*[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