我想通過使用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。 –