1
0
mirror of https://github.com/php/php-src.git synced 2026-03-27 01:32:22 +01:00

- add functions clone_node(), is_blank_node(), create_entity_reference()

- fixed bug in node_name()
- fixed behavior of append_child(), it now adds a child a not a sibling
This commit is contained in:
Uwe Steinmann
2001-11-21 17:01:19 +00:00
parent 4312c5f9e0
commit 6affe84ee7
2 changed files with 157 additions and 8 deletions

View File

@@ -128,15 +128,14 @@ static function_entry php_domxmldoc_class_functions[] = {
PHP_FALIAS(create_text_node, domxml_doc_create_text_node, NULL)
PHP_FALIAS(create_comment, domxml_doc_create_comment, NULL)
PHP_FALIAS(create_attribute, domxml_doc_create_attribute, NULL)
PHP_FALIAS(create_cdata_section, domxml_doc_create_cdata_section, NULL)
PHP_FALIAS(create_entity_reference, domxml_doc_create_entity_reference, NULL)
PHP_FALIAS(create_processing_instruction, domxml_doc_create_processing_instruction, NULL)
PHP_FALIAS(children, domxml_node_children, NULL)
PHP_FALIAS(add_root, domxml_add_root, NULL)
PHP_FALIAS(imported_node, domxml_doc_imported_node, NULL)
PHP_FALIAS(dtd, domxml_intdtd, NULL)
PHP_FALIAS(dumpmem, domxml_dumpmem, NULL)
/*
PHP_FALIAS(create_cdata_section, domxml_create_cdata_section, NULL)
*/
#if defined(LIBXML_XPATH_ENABLED)
PHP_FALIAS(xpath_init, xpath_init, NULL)
PHP_FALIAS(xpath_new_context, xpath_new_context, NULL)
@@ -185,7 +184,10 @@ static zend_function_entry php_domxmlnode_class_functions[] = {
PHP_FALIAS(text_concat, domxml_node_text_concat, NULL)
PHP_FALIAS(set_name, domxml_node_set_name, NULL)
PHP_FALIAS(node_name, domxml_node_name, NULL)
PHP_FALIAS(node_type, domxml_node_type, NULL)
PHP_FALIAS(node_value, domxml_node_value, NULL)
PHP_FALIAS(clone_node, domxml_clone_node, NULL)
PHP_FALIAS(is_blank_node, domxml_is_blank_node, NULL)
{NULL, NULL, NULL}
};
@@ -718,8 +720,6 @@ static zval *php_domobject_new(xmlNodePtr obj, int *found TSRMLS_DC)
rsrc_type = le_domxmlentityrefp;
content = xmlNodeGetContent(nodep);
add_property_stringl(wrapper, "name", (char *) nodep->name, strlen(nodep->name), 1);
if (content)
add_property_stringl(wrapper, "content", (char *) content, strlen(content), 1);
break;
}
@@ -788,6 +788,19 @@ static zval *php_domobject_new(xmlNodePtr obj, int *found TSRMLS_DC)
break;
}
case XML_CDATA_SECTION_NODE:
{
xmlNodePtr nodep = obj;
object_init_ex(wrapper, domxmlcdata_class_entry);
rsrc_type = le_domxmlcdatap;
content = xmlNodeGetContent(nodep);
if (content) {
add_property_long(wrapper, "type", Z_TYPE_P(nodep));
add_property_stringl(wrapper, "content", (char *) content, strlen(content), 1);
}
break;
}
default:
php_error(E_WARNING, "Unsupported Node type: %d\n", Z_TYPE_P(obj));
return NULL;
@@ -1135,7 +1148,11 @@ PHP_FUNCTION(domxml_node_name)
break;
}
RETURN_STRING((char *) str, 1);
if(str != NULL) {
RETURN_STRING((char *) str, 1);
} else {
RETURN_EMPTY_STRING();
}
}
/* }}} */
@@ -1164,7 +1181,33 @@ PHP_FUNCTION(domxml_node_value)
str = NULL;
break;
}
RETURN_STRING(str, 1);
if(str != NULL) {
RETURN_STRING((char *) str, 1);
} else {
RETURN_EMPTY_STRING();
}
}
/* }}} */
/* {{{ proto bool domxml_is_blank_node()
Returns true if node is blank */
PHP_FUNCTION(domxml_is_blank_node)
{
zval *id;
xmlNode *n;
id = getThis();
n = php_dom_get_object(id, le_domxmlnodep, 0 TSRMLS_CC);
if (!n) {
RETURN_FALSE;
}
if(xmlIsBlankNode(n)) {
RETURN_TRUE;
} else {
RETURN_FALSE;
}
}
/* }}} */
@@ -1185,6 +1228,43 @@ PHP_FUNCTION(domxml_node_type)
}
/* }}} */
/* {{{ proto bool domxml_clone_node()
clones a node */
PHP_FUNCTION(domxml_clone_node)
{
zval *arg, *rv;
zval *id;
xmlNode *n, *node;
int ret;
if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long(arg);
id = getThis();
n = php_dom_get_object(id, le_domxmlnodep, 0 TSRMLS_CC);
if (!n) {
RETURN_FALSE;
}
node = xmlCopyNode(n, Z_LVAL_P(arg));
if (!node) {
RETURN_FALSE;
}
rv = php_domobject_new(node, &ret TSRMLS_CC);
if (!rv) {
RETURN_FALSE;
}
SEPARATE_ZVAL(&rv);
*return_value = *rv;
FREE_ZVAL(rv);
}
/* }}} */
/* {{{ proto object domxml_node_first_child()
Returns first child from list of children */
PHP_FUNCTION(domxml_node_first_child)
@@ -1487,7 +1567,7 @@ PHP_FUNCTION(domxml_node_append_child)
RETURN_FALSE;
}
child = xmlAddSibling(nodep, child);
child = xmlAddChildList(nodep, child);
rv = php_domobject_new(child, &ret TSRMLS_CC);
SEPARATE_ZVAL(&rv);
*return_value = *rv;
@@ -2102,6 +2182,70 @@ PHP_FUNCTION(domxml_doc_create_attribute)
}
/* }}} */
/* {{{ proto object domxml_doc_create_cdata_section(string name)
Creates new cdata node */
PHP_FUNCTION(domxml_doc_create_cdata_section)
{
zval *arg, *id, *rv;
xmlNode *node;
xmlDocPtr docp;
int ret;
id = getThis();
if (NULL == (docp = php_dom_get_object(id, le_domxmldocp, 0 TSRMLS_CC))) {
RETURN_FALSE;
}
if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_string(arg);
node = xmlNewCDataBlock(docp, Z_STRVAL_P(arg), strlen(Z_STRVAL_P(arg)));
if (!node) {
RETURN_FALSE;
}
node->doc = docp;
rv = php_domobject_new(node, &ret TSRMLS_CC);
SEPARATE_ZVAL(&rv);
*return_value = *rv;
FREE_ZVAL(rv);
}
/* }}} */
/* {{{ proto object domxml_doc_create_entity_reference(string name)
Creates new cdata node */
PHP_FUNCTION(domxml_doc_create_entity_reference)
{
zval *arg, *id, *rv;
xmlNode *node;
xmlDocPtr docp;
int ret;
id = getThis();
if (NULL == (docp = php_dom_get_object(id, le_domxmldocp, 0 TSRMLS_CC))) {
RETURN_FALSE;
}
if (ZEND_NUM_ARGS() != 1 || getParameters(ht, 1, &arg) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_string(arg);
node = xmlNewReference(docp, Z_STRVAL_P(arg));
if (!node) {
RETURN_FALSE;
}
node->doc = docp;
rv = php_domobject_new(node, &ret TSRMLS_CC);
SEPARATE_ZVAL(&rv);
*return_value = *rv;
FREE_ZVAL(rv);
}
/* }}} */
/* {{{ proto object domxml_doc_create_processing_instruction(string name)
Creates new processing_instruction node */
PHP_FUNCTION(domxml_doc_create_processing_instruction)

View File

@@ -52,6 +52,8 @@ PHP_FUNCTION(domxml_doc_create_text_node);
PHP_FUNCTION(domxml_doc_create_comment);
PHP_FUNCTION(domxml_doc_create_processing_instruction);
PHP_FUNCTION(domxml_doc_create_attribute);
PHP_FUNCTION(domxml_doc_create_cdata_section);
PHP_FUNCTION(domxml_doc_create_entity_reference);
PHP_FUNCTION(domxml_doc_imported_node);
PHP_FUNCTION(domxml_add_root);
PHP_FUNCTION(domxml_intdtd);
@@ -85,13 +87,16 @@ PHP_FUNCTION(domxml_node_has_child_nodes);
PHP_FUNCTION(domxml_node_parent);
PHP_FUNCTION(domxml_node_prefix);
PHP_FUNCTION(domxml_node);
PHP_FUNCTION(domxml_clone_node);
PHP_FUNCTION(domxml_node_unlink_node);
PHP_FUNCTION(domxml_node_new_child);
PHP_FUNCTION(domxml_node_set_content);
PHP_FUNCTION(domxml_node_text_concat);
PHP_FUNCTION(domxml_node_set_name);
PHP_FUNCTION(domxml_node_name);
PHP_FUNCTION(domxml_node_type);
PHP_FUNCTION(domxml_node_value);
PHP_FUNCTION(domxml_is_blank_node);
/* Class Attribute methods */
PHP_FUNCTION(domxml_attr_name);