@@ -355,6 +355,15 @@ PHP_METHOD(DOMElement, getAttributeNames)
355
355
}
356
356
/* }}} end DOMElement::getAttributeNames() */
357
357
358
+ static xmlNodePtr dom_create_attribute (xmlNodePtr nodep , const char * name , const char * value )
359
+ {
360
+ if (xmlStrEqual ((xmlChar * )name , (xmlChar * )"xmlns" )) {
361
+ return (xmlNodePtr ) xmlNewNs (nodep , (xmlChar * )value , NULL );
362
+ } else {
363
+ return (xmlNodePtr ) xmlSetProp (nodep , (xmlChar * ) name , (xmlChar * )value );
364
+ }
365
+ }
366
+
358
367
/* {{{ URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68F082
359
368
Since:
360
369
*/
@@ -405,23 +414,40 @@ PHP_METHOD(DOMElement, setAttribute)
405
414
406
415
}
407
416
408
- if (xmlStrEqual ((xmlChar * )name , (xmlChar * )"xmlns" )) {
409
- if (xmlNewNs (nodep , (xmlChar * )value , NULL )) {
410
- RETURN_TRUE ;
411
- }
412
- } else {
413
- attr = (xmlNodePtr )xmlSetProp (nodep , (xmlChar * ) name , (xmlChar * )value );
414
- }
417
+ attr = dom_create_attribute (nodep , name , value );
415
418
if (!attr ) {
416
419
zend_argument_value_error (1 , "must be a valid XML attribute" );
417
420
RETURN_THROWS ();
418
421
}
422
+ if (attr -> type == XML_NAMESPACE_DECL ) {
423
+ RETURN_TRUE ;
424
+ }
419
425
420
426
DOM_RET_OBJ (attr , & ret , intern );
421
427
422
428
}
423
429
/* }}} end dom_element_set_attribute */
424
430
431
+ static bool dom_remove_attribute (xmlNodePtr attrp )
432
+ {
433
+ ZEND_ASSERT (attrp != NULL );
434
+ switch (attrp -> type ) {
435
+ case XML_ATTRIBUTE_NODE :
436
+ if (php_dom_object_get_data (attrp ) == NULL ) {
437
+ node_list_unlink (attrp -> children );
438
+ xmlUnlinkNode (attrp );
439
+ xmlFreeProp ((xmlAttrPtr )attrp );
440
+ } else {
441
+ xmlUnlinkNode (attrp );
442
+ }
443
+ break ;
444
+ case XML_NAMESPACE_DECL :
445
+ return false;
446
+ EMPTY_SWITCH_DEFAULT_CASE ();
447
+ }
448
+ return true;
449
+ }
450
+
425
451
/* {{{ URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D6AC0F9
426
452
Since:
427
453
*/
@@ -450,23 +476,7 @@ PHP_METHOD(DOMElement, removeAttribute)
450
476
RETURN_FALSE ;
451
477
}
452
478
453
- switch (attrp -> type ) {
454
- case XML_ATTRIBUTE_NODE :
455
- if (php_dom_object_get_data (attrp ) == NULL ) {
456
- node_list_unlink (attrp -> children );
457
- xmlUnlinkNode (attrp );
458
- xmlFreeProp ((xmlAttrPtr )attrp );
459
- } else {
460
- xmlUnlinkNode (attrp );
461
- }
462
- break ;
463
- case XML_NAMESPACE_DECL :
464
- RETURN_FALSE ;
465
- default :
466
- break ;
467
- }
468
-
469
- RETURN_TRUE ;
479
+ RETURN_BOOL (dom_remove_attribute (attrp ));
470
480
}
471
481
/* }}} end dom_element_remove_attribute */
472
482
0 commit comments