]> granicus.if.org Git - php/commitdiff
simplexml->query returns empty array if no nodes were found
authorChristian Stocker <chregu@php.net>
Wed, 31 Aug 2011 11:44:22 +0000 (11:44 +0000)
committerChristian Stocker <chregu@php.net>
Wed, 31 Aug 2011 11:44:22 +0000 (11:44 +0000)
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

ext/simplexml/simplexml.c
ext/simplexml/tests/008.phpt

index c7bada57c40ea360f12b4a36b3ef4422a7d36616..d05630c2c96f29c1687bbd94879232294ed60ff7 100644 (file)
@@ -1294,8 +1294,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) {
@@ -1316,8 +1317,6 @@ SXE_METHOD(xpath)
                                add_next_index_zval(return_value, value);
                        }
                }
-       } else {
-               RETVAL_FALSE;
        }
 
        xmlXPathFreeObject(retval);
index 4fda204a2fe3030a176c80fa491354785e26eba4..8734ba4a46312c9b05e50ce18be61d550124e1db 100644 (file)
@@ -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)