DOMXPathオブジェクトとevaluate()関数を使用して入力XPathをevaluate()
にしようとしています。しかし、予期せぬ結果が出ています。この例では、2つの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行目のxpression。しかし、あなたの '$ xpathValid = 'count(row/entry [。=" en "])'; 'を変更した場合、私は:' float(0) ' –
@Anantそれを実行します[http: /ideone.com/aVSX3G)。 –
ここにも警告が表示されます、BTW: - https://eval.in/653162。 –