Index: src/OFXMLElement.m ================================================================== --- src/OFXMLElement.m +++ src/OFXMLElement.m @@ -486,20 +486,20 @@ { return [[self stringValue] doubleValue]; } - (OFString*)_XMLStringWithParent: (OFXMLElement*)parent + namespaces: (OFDictionary*)allNamespaces indentation: (unsigned int)indentation level: (size_t)level { OFAutoreleasePool *pool, *pool2; char *cString; size_t length, i, j, attributesCount; OFString *prefix, *parentPrefix; OFXMLAttribute **attributesCArray; OFString *ret; - OFMutableDictionary *allNamespaces; OFString *defaultNS; if (characters != nil) return [characters stringByXMLEscaping]; @@ -527,28 +527,33 @@ return ret; } pool = [[OFAutoreleasePool alloc] init]; - if (parent != nil && parent->namespaces != nil) { + parentPrefix = [allNamespaces objectForKey: + (parent != nil && parent->ns != nil ? parent->ns : (OFString*)@"")]; + + /* Add the namespaces of the current element */ + if (allNamespaces != nil) { OFEnumerator *keyEnumerator = [namespaces keyEnumerator]; OFEnumerator *objectEnumerator = [namespaces objectEnumerator]; + OFMutableDictionary *tmp; id key, object; - allNamespaces = [[parent->namespaces mutableCopy] autorelease]; + tmp = [[allNamespaces mutableCopy] autorelease]; while ((key = [keyEnumerator nextObject]) != nil && (object = [objectEnumerator nextObject]) != nil) - [allNamespaces setObject: object - forKey: key]; + [tmp setObject: object + forKey: key]; + + allNamespaces = tmp; } else allNamespaces = namespaces; prefix = [allNamespaces objectForKey: (ns != nil ? ns : (OFString*)@"")]; - parentPrefix = [allNamespaces objectForKey: - (parent != nil && parent->ns != nil ? parent->ns : (OFString*)@"")]; if (parent != nil && parent->ns != nil && parentPrefix == nil) defaultNS = parent->ns; else if (parent != nil && parent->defaultNamespace != nil) defaultNS = parent->defaultNamespace; @@ -678,10 +683,11 @@ if (indent) [tmp addItem: "\n"]; child = [childrenCArray[j] _XMLStringWithParent: self + namespaces: allNamespaces indentation: (indent ? indentation : 0) level: level + 1]; [tmp addNItems: [child cStringLength] fromCArray: [child cString]]; @@ -747,17 +753,19 @@ } - (OFString*)XMLString { return [self _XMLStringWithParent: nil + namespaces: nil indentation: 0 level: 0]; } - (OFString*)XMLStringWithIndentation: (unsigned int)indentation { return [self _XMLStringWithParent: nil + namespaces: nil indentation: indentation level: 0]; } - (OFString*)description