mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Split off some methods so they can be reused in different places
This commit is contained in:
parent
a73f38f407
commit
5b5a3d79da
1 changed files with 34 additions and 24 deletions
|
@ -355,6 +355,15 @@ PHP_METHOD(DOMElement, getAttributeNames)
|
|||
}
|
||||
/* }}} end DOMElement::getAttributeNames() */
|
||||
|
||||
static xmlNodePtr dom_create_attribute(xmlNodePtr nodep, const char *name, const char* value)
|
||||
{
|
||||
if (xmlStrEqual((xmlChar *)name, (xmlChar *)"xmlns")) {
|
||||
return (xmlNodePtr) xmlNewNs(nodep, (xmlChar *)value, NULL);
|
||||
} else {
|
||||
return (xmlNodePtr) xmlSetProp(nodep, (xmlChar *) name, (xmlChar *)value);
|
||||
}
|
||||
}
|
||||
|
||||
/* {{{ URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68F082
|
||||
Since:
|
||||
*/
|
||||
|
@ -405,23 +414,40 @@ PHP_METHOD(DOMElement, setAttribute)
|
|||
|
||||
}
|
||||
|
||||
if (xmlStrEqual((xmlChar *)name, (xmlChar *)"xmlns")) {
|
||||
if (xmlNewNs(nodep, (xmlChar *)value, NULL)) {
|
||||
RETURN_TRUE;
|
||||
}
|
||||
} else {
|
||||
attr = (xmlNodePtr)xmlSetProp(nodep, (xmlChar *) name, (xmlChar *)value);
|
||||
}
|
||||
attr = dom_create_attribute(nodep, name, value);
|
||||
if (!attr) {
|
||||
zend_argument_value_error(1, "must be a valid XML attribute");
|
||||
RETURN_THROWS();
|
||||
}
|
||||
if (attr->type == XML_NAMESPACE_DECL) {
|
||||
RETURN_TRUE;
|
||||
}
|
||||
|
||||
DOM_RET_OBJ(attr, &ret, intern);
|
||||
|
||||
}
|
||||
/* }}} end dom_element_set_attribute */
|
||||
|
||||
static bool dom_remove_attribute(xmlNodePtr attrp)
|
||||
{
|
||||
ZEND_ASSERT(attrp != NULL);
|
||||
switch (attrp->type) {
|
||||
case XML_ATTRIBUTE_NODE:
|
||||
if (php_dom_object_get_data(attrp) == NULL) {
|
||||
node_list_unlink(attrp->children);
|
||||
xmlUnlinkNode(attrp);
|
||||
xmlFreeProp((xmlAttrPtr)attrp);
|
||||
} else {
|
||||
xmlUnlinkNode(attrp);
|
||||
}
|
||||
break;
|
||||
case XML_NAMESPACE_DECL:
|
||||
return false;
|
||||
EMPTY_SWITCH_DEFAULT_CASE();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/* {{{ URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D6AC0F9
|
||||
Since:
|
||||
*/
|
||||
|
@ -450,23 +476,7 @@ PHP_METHOD(DOMElement, removeAttribute)
|
|||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
switch (attrp->type) {
|
||||
case XML_ATTRIBUTE_NODE:
|
||||
if (php_dom_object_get_data(attrp) == NULL) {
|
||||
node_list_unlink(attrp->children);
|
||||
xmlUnlinkNode(attrp);
|
||||
xmlFreeProp((xmlAttrPtr)attrp);
|
||||
} else {
|
||||
xmlUnlinkNode(attrp);
|
||||
}
|
||||
break;
|
||||
case XML_NAMESPACE_DECL:
|
||||
RETURN_FALSE;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
RETURN_TRUE;
|
||||
RETURN_BOOL(dom_remove_attribute(attrp));
|
||||
}
|
||||
/* }}} end dom_element_remove_attribute */
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue