@@ -237,6 +237,15 @@ PHP_METHOD(DOMElement, getAttribute)
237
237
}
238
238
/* }}} end dom_element_get_attribute */
239
239
240
+ static xmlNodePtr dom_create_attribute (xmlNodePtr nodep , const char * name , const char * value )
241
+ {
242
+ if (xmlStrEqual ((xmlChar * )name , (xmlChar * )"xmlns" )) {
243
+ return (xmlNodePtr ) xmlNewNs (nodep , (xmlChar * )value , NULL );
244
+ } else {
245
+ return (xmlNodePtr ) xmlSetProp (nodep , (xmlChar * ) name , (xmlChar * )value );
246
+ }
247
+ }
248
+
240
249
/* {{{ URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68F082
241
250
Since:
242
251
*/
@@ -287,23 +296,40 @@ PHP_METHOD(DOMElement, setAttribute)
287
296
288
297
}
289
298
290
- if (xmlStrEqual ((xmlChar * )name , (xmlChar * )"xmlns" )) {
291
- if (xmlNewNs (nodep , (xmlChar * )value , NULL )) {
292
- RETURN_TRUE ;
293
- }
294
- } else {
295
- attr = (xmlNodePtr )xmlSetProp (nodep , (xmlChar * ) name , (xmlChar * )value );
296
- }
299
+ attr = dom_create_attribute (nodep , name , value );
297
300
if (!attr ) {
298
301
zend_argument_value_error (1 , "must be a valid XML attribute" );
299
302
RETURN_THROWS ();
300
303
}
304
+ if (attr -> type == XML_NAMESPACE_DECL ) {
305
+ RETURN_TRUE ;
306
+ }
301
307
302
308
DOM_RET_OBJ (attr , & ret , intern );
303
309
304
310
}
305
311
/* }}} end dom_element_set_attribute */
306
312
313
+ static bool dom_remove_attribute (xmlNodePtr attrp )
314
+ {
315
+ ZEND_ASSERT (attrp != NULL );
316
+ switch (attrp -> type ) {
317
+ case XML_ATTRIBUTE_NODE :
318
+ if (php_dom_object_get_data (attrp ) == NULL ) {
319
+ node_list_unlink (attrp -> children );
320
+ xmlUnlinkNode (attrp );
321
+ xmlFreeProp ((xmlAttrPtr )attrp );
322
+ } else {
323
+ xmlUnlinkNode (attrp );
324
+ }
325
+ break ;
326
+ case XML_NAMESPACE_DECL :
327
+ return false;
328
+ EMPTY_SWITCH_DEFAULT_CASE ();
329
+ }
330
+ return true;
331
+ }
332
+
307
333
/* {{{ URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D6AC0F9
308
334
Since:
309
335
*/
@@ -332,23 +358,7 @@ PHP_METHOD(DOMElement, removeAttribute)
332
358
RETURN_FALSE ;
333
359
}
334
360
335
- switch (attrp -> type ) {
336
- case XML_ATTRIBUTE_NODE :
337
- if (php_dom_object_get_data (attrp ) == NULL ) {
338
- node_list_unlink (attrp -> children );
339
- xmlUnlinkNode (attrp );
340
- xmlFreeProp ((xmlAttrPtr )attrp );
341
- } else {
342
- xmlUnlinkNode (attrp );
343
- }
344
- break ;
345
- case XML_NAMESPACE_DECL :
346
- RETURN_FALSE ;
347
- default :
348
- break ;
349
- }
350
-
351
- RETURN_TRUE ;
361
+ RETURN_BOOL (dom_remove_attribute (attrp ));
352
362
}
353
363
/* }}} end dom_element_remove_attribute */
354
364
0 commit comments