Sure, documents can call dumpmem(), but there's no way to get the XML of a
node.

Until now!

Not knowing at all what I was doing, I copied code from the function
unlink_node and modified it to call xmlDumpNode().  It works for me, though I
expect there's probably a memory leak in it since I don't know (right now) the
proper way to deallocate an xmlBufferPtr.

To make it work, you need to edit php_domxml.c and insert a suitably modified
line everywhere you see a reference to unlink_node.

--
.tom


PHP_FUNCTION(domxml_dump_node)
{
    zval *id, **tmp;
        xmlBuffer *buf;
        xmlDoc *doc;
    xmlNode *nodep, *last;
    int ret;

    if (ZEND_NUM_ARGS() == 0) {
        id = getThis();
        if (id) {
            if (zend_hash_find(id->value.obj.properties, "node", sizeof("node"), (void 
**)&tmp) == FAILURE) {
                php_error(E_WARNING, "unable to find my handle property");
                RETURN_FALSE;
            }
            ZEND_FETCH_RESOURCE(nodep,xmlNodePtr,tmp,-1, "DomNode", le_domxmlnodep)
        } else {
            RETURN_FALSE;
        }
    } else if ((ZEND_NUM_ARGS() != 1) || getParameters(ht, 1, &id) == FAILURE) {
        WRONG_PARAM_COUNT;
    } else {
        if (zend_hash_find(id->value.obj.properties, "node", sizeof("node"), (void 
**)&tmp) == FAILURE) {
            php_error(E_WARNING, "unable to find my handle property");
            RETURN_FALSE;
        }
        ZEND_FETCH_RESOURCE(nodep,xmlNodePtr,tmp,-1, "DomNode", le_domxmlnodep)
    }

        buf = xmlBufferCreate();
    xmlNodeDump(buf, nodep->doc, nodep, 1, 0);
    FREE_RETURN_STRINGL(buf->content, buf->use, 1);
}

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to