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
Php 为什么“child”和“genderant”在这个domdocument()查询中给出相同的结果?_Php_Xpath_Domdocument - Fatal编程技术网

Php 为什么“child”和“genderant”在这个domdocument()查询中给出相同的结果?

Php 为什么“child”和“genderant”在这个domdocument()查询中给出相同的结果?,php,xpath,domdocument,Php,Xpath,Domdocument,我正在尝试从以下链接中检索文本 $html=query'//后代::a[@class=details]'; //$prices\u nodeList=$xpath->query'//a[@class=details]/genderant::text'; foreach$prices\u nodeList为$price{ $price[]=$price->nodeValue; } 回声价格; 回响 似乎做了我想做的,但我不知道它是如何工作的。据我所知,它说“获取链接的所有直接子元素和类详细信息”。

我正在尝试从以下链接中检索文本

$html=query'//后代::a[@class=details]'; //$prices\u nodeList=$xpath->query'//a[@class=details]/genderant::text'; foreach$prices\u nodeList为$price{ $price[]=$price->nodeValue; } 回声价格

; 回响 似乎做了我想做的,但我不知道它是如何工作的。据我所知,它说“获取链接的所有直接子元素和类详细信息”。但是后两个链接中的文本不是直接子元素,所以我不确定为什么不必使用

$prices_nodeList = $xpath->query('//a[@class="details"]/descendant::text()');
这个ie,第一个注释掉的$prices\u nodeList值也检索所有三个值。我想知道为什么它们都能工作,我的查询是否是最好的方法。相比之下

$prices_nodeList = $xpath->query('//a[@class="details"]/child::text()');
同样有效,但是

只检索第一个值$2697.75,而不检索后两个值,因为文本包含在元素中

据我所知,它说‘获取链接的所有直接子元素和类详细信息’

不,这意味着获取具有类详细信息的所有链接,这些类详细信息是当前上下文节点的子级

上下文节点是上一步选择的节点

//是/descandant或self::node的快捷方式。从:

//是/genderant或self::node/的缩写。例如,//para是/genderant或self::node/child::para的缩写,因此将选择文档中的任何para元素,即使是作为文档元素的para元素也将由//para选择,因为文档元素节点是根节点的子节点;div//para是div/genderant或self::node/child::para的缩写,因此将选择div子级的所有para子级

/后代或self::node基本上选择每个节点。因此,查看子轴和子轴之间没有区别


如果链接不是某个节点的子节点,那么它肯定是其子节点之一的子节点,该子节点也是由//选择的。

在XPath中,伪运算符//是子节点或self::axis的缩写,用于选择某一类型的所有节点,无论它们位于输入树中的何处。然后:

//child::a与//a相同

//后代::a仍然等同于//a

始终选择文档中的所有节点,无论它们位于何处

而:

//a/genderant::text,等于//a//text,表示选择任意a的所有子体文本节点,与

//a/child::text,等于//a/text,表示选择任意a$2697的所有子文本节点。75仅为a的子节点,其他文本节点为子节点

在XPath中,显式轴子代或self::和child::很少使用,而且是必需的。第一个通常由//代替。第二个变量隐式应用于/或//as/child::或//child::

$prices_nodeList = $xpath->query('//a[@class="details"]/descendant::text()');
$prices_nodeList = $xpath->query('//a[@class="details"]/child::text()');