Index: src/OFXMLElement.m ================================================================== --- src/OFXMLElement.m +++ src/OFXMLElement.m @@ -335,18 +335,18 @@ ret->isa = [OFString class]; return ret; } - (OFString*)_XMLStringWithParent: (OFXMLElement*)parent + namespaces: (OFDictionary*)all_namespaces { OFAutoreleasePool *pool, *pool2; char *str_c; size_t len, i, j, attrs_count; OFString *prefix, *parent_prefix; OFXMLAttribute **attrs_carray; OFString *ret, *tmp; - OFMutableDictionary *all_namespaces; OFString *def_ns; if (characters != nil) return [characters stringByXMLEscaping]; @@ -370,28 +370,32 @@ return str; } pool = [[OFAutoreleasePool alloc] init]; - if (parent != nil && parent->namespaces != nil) { + parent_prefix = [all_namespaces objectForKey: + (parent != nil && parent->ns != nil ? parent->ns : (OFString*)@"")]; + + if (all_namespaces != nil) { OFEnumerator *key_enum = [namespaces keyEnumerator]; OFEnumerator *obj_enum = [namespaces objectEnumerator]; + OFMutableDictionary *mutable; id key, obj; - all_namespaces = [[parent->namespaces mutableCopy] autorelease]; + mutable = [[all_namespaces mutableCopy] autorelease]; while ((key = [key_enum nextObject]) != nil && (obj = [obj_enum nextObject]) != nil) - [all_namespaces setObject: obj - forKey: key]; + [mutable setObject: obj + forKey: key]; + + all_namespaces = mutable; } else all_namespaces = namespaces; prefix = [all_namespaces objectForKey: (ns != nil ? ns : (OFString*)@"")]; - parent_prefix = [all_namespaces objectForKey: - (parent != nil && parent->ns != nil ? parent->ns : (OFString*)@"")]; if (parent != nil && parent->ns != nil && parent_prefix == nil) def_ns = parent->ns; else if (parent != nil && parent->defaultNamespace != nil) def_ns = parent->defaultNamespace; @@ -504,11 +508,12 @@ for (j = 0; j < children_count; j++) append(tmp, @selector( appendCStringWithoutUTF8Checking:), [[children_carray[j] - _XMLStringWithParent: self] cString]); + _XMLStringWithParent: self + namespaces: all_namespaces] cString]); len += [tmp cStringLength] + [name cStringLength] + 2; @try { str_c = [self resizeMemory: str_c toSize: len]; @@ -556,11 +561,12 @@ return ret; } - (OFString*)XMLString { - return [self _XMLStringWithParent: nil]; + return [self _XMLStringWithParent: nil + namespaces: nil]; } - (OFString*)description { return [self XMLString];