APPEND_PREV_ELEMENT(counter, value);
MAKE_STD_ZVAL(value);
- contents = xmlNodeListGetString(sxe->document, attr->children, 1);
+ contents = xmlNodeListGetString(sxe->document, attr->xmlChildrenNode, 1);
ZVAL_STRING(value, contents, 0);
APPEND_CUR_ELEMENT(counter, value);
case IS_NULL:
convert_to_string(value);
case IS_STRING:
- xmlNodeSetContentLen(node->xmlChildrenNode, Z_STRVAL_P(value), Z_STRLEN_P(value));
+ xmlNodeSetContentLen(node, Z_STRVAL_P(value), Z_STRLEN_P(value));
break;
default:
php_error(E_WARNING, "It is not yet possible to assign complex types to attributes");
char *name;
xmlNodePtr node;
xmlNodePtr newnode;
+ xmlAttrPtr attr;
int counter = 0;
-
+ int is_attr = 0;
+
name = Z_STRVAL_P(member);
sxe = php_sxe_fetch_object(object TSRMLS_CC);
GET_NODE(sxe, node);
+ attr = node->properties;
+ while (attr) {
+ if (!xmlStrcmp(attr->name, name)) {
+ is_attr = 1;
+ ++counter;
+ break;
+ }
+
+ attr = attr->next;
+ }
+
+ node = node->xmlChildrenNode;
while (node) {
if (!xmlStrcmp(node->name, name)) {
newnode = node;
}
if (counter == 1) {
- change_node_zval(newnode, value);
+ if (is_attr) {
+ change_node_zval(attr->xmlChildrenNode, value);
+ } else {
+ change_node_zval(newnode->xmlChildrenNode, value);
+ }
} else if (counter > 1) {
- php_error(E_WARNING, "Cannot assign to an array of nodes\n");
+ php_error(E_WARNING, "Cannot assign to an array of nodes (duplicate subnodes or attr detected)\n");
}
}
static zval **
sxe_property_get_ptr(zval *object, zval *member TSRMLS_DC)
{
- /* XXX: Return NULL till I figure this out */
- return NULL;
+ zval *property = sxe_property_read(object, member TSRMLS_CC);
+ zval_add_ref(&property);
+
+ return &property;
}
/* }}} */