一步分配xpath->查询和读取长度

时间:2016-04-17 04:02:53

标签: php xpath

为什么不允许这样做? (我在password)收到语法错误:

->length

根据http://php.net/manual/en/language.operators.assignment.php,赋值表达式的值是指定的值,但在分配xpath->查询的结果时它似乎不起作用。

我想在while循环中使用表达式,我在其中分配查询结果并在一步中检查零长度:

($x=$xpath->query($s))->length

1 个答案:

答案 0 :(得分:0)

我不是一个PHP专家,但从我观察到的,它是括号和对象操作符->)的组合,触发了错误。赋值表达式本身正确地返回DOMNodeList的实例,正如我们所期望的那样给出了链接文档:

$xml = "<person><name>John-Doe</name></person>";
$doc = new DOMDocument();
$doc->loadXML($xml);
$xpath = new DOMXpath($doc);

$test = ($x = $xpath->query("/person/foo"));
//$test contains instance of `DOMNodeList` on which we can use `->` to get the length
echo $test->length;

//but using `->` on parentheses triggers the initial error :
echo ($test)->length;

要实现实际目标,您可以使用普通for循环,这样可以更灵活地控制循环,而不是使用while。以下代码片段的内容:

for($x=$xpath->query($s);
    $x->length;
    $x=$xpath->query($s))
{
    //do something with $x
}

我假设 $xpath->query($s)结果在下一次迭代中以$x->length值减小的方式发生变化,以便循环最终终止。