From dc761b1af13c769bfab8c28d1e5004b1154ff384 Mon Sep 17 00:00:00 2001 From: Rob Richards Date: Mon, 16 Jun 2008 15:44:22 +0000 Subject: [PATCH] add parameter allowing node to be exported into existing Document context add test fix warnings --- ext/xmlreader/php_xmlreader.c | 18 ++++++++++++---- ext/xmlreader/tests/expand.phpt | 37 +++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 ext/xmlreader/tests/expand.phpt diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c index 134446ef18..ea674efb66 100644 --- a/ext/xmlreader/php_xmlreader.c +++ b/ext/xmlreader/php_xmlreader.c @@ -1180,12 +1180,22 @@ Moves the position of the current instance to the next node in the stream. */ PHP_METHOD(xmlreader, expand) { #ifdef HAVE_DOM - zval *id, *rv = NULL; + zval *id, *rv = NULL, *basenode = NULL; int ret; xmlreader_object *intern; xmlNode *node, *nodec; + xmlDocPtr docp = NULL; + php_libxml_node_object *domobj = NULL; + + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|O!", &id, xmlreader_class_entry, &basenode, dom_node_class_entry) == FAILURE) { + return; + } + + if (basenode != NULL) { + NODE_GET_OBJ(node, basenode, xmlNodePtr, domobj); + docp = node->doc; + } - id = getThis(); intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC); if (intern && intern->ptr) { @@ -1195,12 +1205,12 @@ PHP_METHOD(xmlreader, expand) php_error_docref(NULL TSRMLS_CC, E_WARNING, "An Error Occured while expanding"); RETURN_FALSE; } else { - nodec = xmlCopyNode(node, 1); + nodec = xmlDocCopyNode(node, docp, 1); if (nodec == NULL) { php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Cannot expand this node type"); RETURN_FALSE; } else { - DOM_RET_OBJ(rv, nodec, &ret, NULL); + DOM_RET_OBJ(rv, nodec, &ret, (dom_object *)domobj); } } } else { diff --git a/ext/xmlreader/tests/expand.phpt b/ext/xmlreader/tests/expand.phpt new file mode 100644 index 0000000000..99c0604b8e --- /dev/null +++ b/ext/xmlreader/tests/expand.phpt @@ -0,0 +1,37 @@ +--TEST-- +XMLReader: Expand into existing DOM documet +--SKIPIF-- + +--FILE-- + +base book'; + +$xmlstring = ' +new book'; + +$dom = new DOMDocument(); +$dom->loadXML($basexml); + +$reader = new XMLReader(); +$reader->XML($xmlstring); +while ($reader->read()) { + if ($reader->localName == "book") { + $node = $reader->expand($dom); + if ($node->ownerDocument) { + echo $node->ownerDocument->documentElement->firstChild->textContent . "\n"; + } + break; + } +} +$reader->close(); +?> +===DONE=== +--EXPECT-- +base book +===DONE=== \ No newline at end of file -- 2.50.1