[英]Why does DOMXPath->evaluate() return false
我试图evaluate()
使用DOMXPath对象及其评价()函数的输入的XPath。 但是,我得到了一些意外的结果。 在该示例中,两个XPath结构或多或少相同,不同之处在于@begin
在无效的@begin
进行了比较。 我不明白为什么这段代码无效。
<?php
$newDomObj = new DOMDocument;
$newXpathObj = new DOMXPath($newDomObj);
$xpathValid = '//node[@cat="smain" and node[@rel="su" and @pt="vnw"] and node[@rel="hd" and @pt="ww"] and node[@rel="predc" and @cat="np" and node[@rel="det" and @pt="lid"] and node[@rel="hd" and @pt="n"]]]';
$xpathInvalid = '//node[@cat="smain" and node[@rel="su" and @pt="vnw" and number(@begin) < ../node[@rel="hd" and @pt="ww"]/number(@begin)] and node[@rel="hd" and @pt="ww" and number(@begin) < ../node[@rel="predc" and @cat="np"]/node[@rel="det" and @pt="lid"]/number(@begin)] and node[@rel="predc" and @cat="np" and node[@rel="det" and @pt="lid" and number(@begin) < ../node[@rel="hd" and @pt="n"]/number(@begin)] and node[@rel="hd" and @pt="n"]]]';
$valid = ($newXpathObj->evaluate($xpathValid) === false) ? false : true;
$invalid = ($newXpathObj->evaluate($xpathInvalid) === false) ? false : true;
var_dump($valid);
var_dump($invalid);
输出量
bool(true)
bool(false)
(注意,为了更好地检查给定的XPath结构,您可以使用我的美化工具 -免责声明,我是该工具的作者。您可以在此处测试上述PHP代码。)
那么我的XPath有什么问题,还是我用错误的方式对其进行了评估? 如何评估这种XPath?
这是因为第二个XPath的以下部分无效,因为DOMXPath
支持的XPath 1.0不支持在路径步骤中调用函数:
../node[@rel="hd" and @pt="n"]/number(@begin)]
如果../node[@rel="hd" and @pt="n"]
总是返回最多1个结果,或者如果只返回第一个项目,则返回多个项目,则您可以改用以下表达式:
number(../node[@rel="hd" and @pt="n"]/@begin)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.