Browse Source

Merge from Trunk

simplexml->query returns empty array if no nodes were found
and false if libxml thinks the xpath-expression was invalid.
Behaves now the same like DomXPath and fixes Bug #48601
Adjusted a test to reflect that change
pull/12/head
Christian Stocker 15 years ago
parent
commit
e1813b69c5
  1. 6
      NEWS
  2. 5
      ext/simplexml/simplexml.c
  3. 9
      ext/simplexml/tests/008.phpt

6
NEWS

@ -26,6 +26,12 @@ PHP NEWS
. Don't set $_SERVER['HTTPS'] on unsecure connection (bug #55403). (Uwe
Schindler)
- SimpleXML:
. Reverted the SimpleXML->query() behaviour to returning empty arrays
instead of false when no nodes are found as it was since 5.3.3
(bug #48601). (chregu, rrichards)
23 Aug 2011, PHP 5.3.8
- Core:

5
ext/simplexml/simplexml.c

@ -1264,8 +1264,9 @@ SXE_METHOD(xpath)
result = retval->nodesetval;
array_init(return_value);
if (result != NULL) {
array_init(return_value);
for (i = 0; i < result->nodeNr; ++i) {
nodeptr = result->nodeTab[i];
if (nodeptr->type == XML_TEXT_NODE || nodeptr->type == XML_ELEMENT_NODE || nodeptr->type == XML_ATTRIBUTE_NODE) {
@ -1286,8 +1287,6 @@ SXE_METHOD(xpath)
add_next_index_zval(return_value, value);
}
}
} else {
RETVAL_FALSE;
}
xmlXPathFreeObject(retval);

9
ext/simplexml/tests/008.phpt

@ -25,7 +25,10 @@ EOF;
$sxe = simplexml_load_string($xml);
var_dump($sxe->xpath("elem1/elem2/elem3/elem4"));
//valid expression
var_dump($sxe->xpath("***"));
//invalid expression
var_dump($sxe->xpath("**"));
?>
--EXPECTF--
array(1) {
@ -36,4 +39,10 @@ array(1) {
}
}
}
array(0) {
}
Warning: SimpleXMLElement::xpath(): Invalid expression in %s on line %d
Warning: SimpleXMLElement::xpath(): xmlXPathEval: evaluation failed in %s on line %d
bool(false)
Loading…
Cancel
Save