How to add new functions to SimpleXML extention

php.internals

Alexander

22 years ago
Hi! I'm just playing with simplexml and wonder if two new functions of the simplexml_element object would be usefull: getName() and getParent(). I'm interesting in adding them to the extention, if possible. What should I do for this? (I also think that it may be in FAQ, but I did not find that info with my search skills). Basically, this is my first experiment with PHP Extensions. I may be wrong with my code, but tests pass is ok ----------------------- Thank you for time, Alexander Netkachev http://devlink.narod.ru/ Code for getName function: /* {{{ getName() */ SXE_METHOD(getName) { char *name; xmlNodePtr node; // current node php_sxe_object *sxe = php_sxe_fetch_object(getThis() TSRMLS_CC); GET_NODE(sxe, node); if (node && (name = (char *)(node->name))) { RETURN_STRING(name, 1); } RETURN_EMPTY_STRING(); } /* }}} */ /* {{{ getParent() */ SXE_METHOD(getParent) { xmlNodePtr node; // current node xmlNodePtr pNode; // node->parent php_sxe_object *sxe = php_sxe_fetch_object(getThis() TSRMLS_CC); GET_NODE(sxe, node); if (node && (pNode = node->parent)) { _node_as_zval(sxe, pNode, return_value TSRMLS_CC); return; } RETURN_NULL(); } /* }}} */ File: ext/simplexml/tests/019.phpt --TEST-- SimpleXML: Test getParent() and getName() functions --SKIPIF-- <?php if (!extension_loaded("simplexml")) print "skip"; ?> --FILE-- <?php $doc = simplexml_load_string('<html><body></body></html>'); var_dump(trim($doc->body->getParent()->getName())); echo '--done--'; ?> --EXPECT-- string(4) "html" --done--

Sterling Hughes

22 years ago
Funny, i writing a response to adam's message while this got to the mailing list. Take a look at my response to adam, as it covers this patch as well. -Sterling

Alexander

22 years ago
Hi, Hope, I understand your point. It looks like having two DOMs is not in your plans :-) getParent is really equal to xsearch('..'). But what about name? Is it possible to get the name of the current simplexml_element using xsearch? I also wonder if I created "right" functions because I plan to create a tutor article "How to extend PHP" with these functions as examples. Are they correct from this point of view? Regards, Alexander Netkachev Sterling Hughes wrote:

Marcus Börger

22 years ago
Hello Alexander, generally a good idea but we are in feature freeze mode for PHP 5.0.x which is our current head. That means you have to suspend your idea until HEAD and PHP_5_0 are different branches. This will most likely happen during the next two months. To not forget your idea you can open a bug report and insert your idea with category 'Feature/Change request'. regards marcus Monday, January 12, 2004, 4:28:05 PM, you wrote:
> Hi!
> I'm just playing with simplexml and wonder if two new functions of the > simplexml_element object would be usefull: getName() and getParent(). I'm > interesting in adding them to the extention, if possible. What should I do > for this? (I also think that it may be in FAQ, but I did not find that info > with my search skills). > Basically, this is my first experiment with PHP Extensions. I may be wrong > with my code, but tests pass is ok
> ----------------------- > Thank you for time, > Alexander Netkachev > http://devlink.narod.ru/
> Code for getName function: > /* {{{ getName() > */ > SXE_METHOD(getName) > { > char *name; > xmlNodePtr node; // current node > php_sxe_object *sxe = php_sxe_fetch_object(getThis() TSRMLS_CC); > GET_NODE(sxe, node); > if (node && (name = (char *)(node->name))) { > RETURN_STRING(name, 1); > } > RETURN_EMPTY_STRING(); > } > /* }}} */
> /* {{{ getParent() > */ > SXE_METHOD(getParent) > { > xmlNodePtr node; // current node > xmlNodePtr pNode; // node->parent > php_sxe_object *sxe = php_sxe_fetch_object(getThis() TSRMLS_CC); > GET_NODE(sxe, node); > if (node && (pNode = node->parent)) { > _node_as_zval(sxe, pNode, return_value TSRMLS_CC); > return; > } > RETURN_NULL(); > } > /* }}} */
> File: ext/simplexml/tests/019.phpt > --TEST-- > SimpleXML: Test getParent() and getName() functions > --SKIPIF-- > <?php if (!extension_loaded("simplexml")) print "skip"; ?> > --FILE-- > <?php > $doc = simplexml_load_string('<html><body></body></html>'); > var_dump(trim($doc->body->getParent()->getName())); > echo '--done--';
?>>
> --EXPECT-- > string(4) "html" > --done--
-- Best regards, Marcus mailto:helly@php.net