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表达式';不存在?_Xpath - Fatal编程技术网

节点不运行时的xpath表达式';不存在?

节点不运行时的xpath表达式';不存在?,xpath,Xpath,我正在处理文档中的一些异常情况,主要是某些节点存在,而其他一些时候,它不存在。我想要一个能够考虑这两种情况的xpath 例如,在我的文档中,有span存在和不存在的情况 /html/body/span/div/table/tr/td/a /html/body/div/table/tr/td/a 如何表达匹配上述两种情况的xpath?选择器将搜索任意深度。这将在有span或没有span的情况下工作(除了body和span之外,它还会在其他标记的内部找到div): 可以使用union|运算符将两个

我正在处理文档中的一些异常情况,主要是某些节点存在,而其他一些时候,它不存在。我想要一个能够考虑这两种情况的xpath

例如,在我的文档中,有span存在和不存在的情况

/html/body/span/div/table/tr/td/a
/html/body/div/table/tr/td/a

如何表达匹配上述两种情况的xpath?

选择器将搜索任意深度。这将在有span或没有span的情况下工作(除了body和span之外,它还会在其他标记的内部找到div):

可以使用union
|
运算符将两个结果集连接在一起:

/html/body/span/div/table/tr/td/a |
/html/body/div/table/tr/td/a
您可以使用一些疯狂的过滤来尝试在一条路径中完成这一切。未经测试:

/html/body/descendant-or-self::*[self::body or self::span/parent::body]/div/table/tr/td/a

我不明白为什么这样的问题。。。你注意到
/html//a
在这两种情况下都会选择
a
元素吗?是的,但是
/
会简单地返回页面上的所有链接,我希望链接“大致”遵循上面的某种结构……通过疯狂的过滤,它似乎同时选择了body和span(当它存在时)。是否可以使其仅选择范围?当“跨度”不存在时,它会选择它应该选择的实体。
/html/body/descendant-or-self::*[self::body or self::span/parent::body]/div/table/tr/td/a