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를 어떻게 평가할 수 있습니까? 항상 수익을 보장
../node[@rel="hd" and @pt="n"]/number(@begin)]
../node[@rel="hd" and @pt="n"]
경우 : 2 XPath는 다음과 같은 부분이 1.0 - 어떤 DOMXPath
supports-이 경로 단계에서 함수를 호출 지원하지 않습니다 XPath는 이후 유효하지 않은 때문이다
내가 무엇입니까이 하나를 실행하고 있습니다 : - 경고 : DOMXPath :: evaluate() : 잘못된 e .......... on line 13'의 xpression. 하지만 당신의'$ xpathValid = 'count (row/entry [. = "en"])'; '를 변경했다면 : -'float (0)' –
@Anant [http : /ideone.com/aVSX3G). –
경고도 표시됩니다. BTW : - https://eval.in/653162. –