我想通过使用DOMXPath对象及其evaluate()函数来输入XPath的evaluate()
。但是,我收到了一些意想不到的结果。在这个例子中,两个XPath结构或多或少都是相同的,除了在无效的结构中比较@begin
。不过,我不明白为什么这段代码是无效的。为什么DOMXPath-> evaluate()返回false
<?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)
(注意,以更好地检查你可以使用my beautifier给定的XPath结构 - 免责声明,我是该工具的作者可以测试上面的PHP代码here。 )
那么我的XPath出了什么问题,还是我用错误的方式评估它?我如何评估这种XPath?
当我运行这一个时,我得到: - '警告:DOMXPath :: evaluate():无效e第13行..........中的表达式。但是,如果我改变了你的'$ xpathValid ='count(row/entry [。=“en”])';',那么我得到:'float(0)' –
@Anant运行它[here](http:/ /ideone.com/aVSX3G)。 –
这里也显示了警告,BTW: - https://eval.in/653162。 –