diff --git a/ChangeLog b/ChangeLog index c52e2d0cb..0688df3ac 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2012-01-05 Richard Frith-Macdonald + + * Source/NSXMLDocument.m: + * Source/NSXMLElement.m: + Replace a few lines accidentally lost. + 2012-01-04 Richard Frith-Macdonald * Headers/Foundation/NSXMLDocument.h: diff --git a/Source/NSXMLDocument.m b/Source/NSXMLDocument.m index 03f8a56de..50f90a620 100644 --- a/Source/NSXMLDocument.m +++ b/Source/NSXMLDocument.m @@ -93,16 +93,24 @@ GS_PRIVATE_INTERNAL(NSXMLDocument) GS_CREATE_INTERNAL(NSXMLDocument) if ((self = [super initWithKind: NSXMLDocumentKind options: 0]) != nil) { - NSXMLParser *parser = [[NSXMLParser alloc] initWithData: data]; - - if (parser != nil) + if (nil != data) { - internal->standalone = YES; - internal->elementStack = [[NSMutableArray alloc] initWithCapacity: 10]; - ASSIGN(internal->xmlData, data); - [parser setDelegate: self]; - [parser parse]; - RELEASE(parser); + NSXMLParser *parser = [[NSXMLParser alloc] initWithData: data]; + + if (nil == parser) + { + DESTROY(self); + } + else + { + internal->standalone = YES; + internal->elementStack + = [[NSMutableArray alloc] initWithCapacity: 10]; + ASSIGN(internal->xmlData, data); + [parser setDelegate: self]; + [parser parse]; + RELEASE(parser); + } } } return self; @@ -218,7 +226,7 @@ GS_PRIVATE_INTERNAL(NSXMLDocument) { [child setParent: self]; [(NSMutableArray *)internal->children insertObject: child atIndex: index]; - internal->childrenHaveMutated = YES; + // internal->childrenHaveMutated = YES; } - (void) insertChildren: (NSArray*)children atIndex: (NSUInteger)index @@ -235,7 +243,7 @@ GS_PRIVATE_INTERNAL(NSXMLDocument) - (void) removeChildAtIndex: (NSUInteger)index { [(NSMutableArray *)internal->children removeObjectAtIndex: index]; - internal->childrenHaveMutated = YES; + // internal->childrenHaveMutated = YES; } - (void) setChildren: (NSArray*)children @@ -271,6 +279,26 @@ GS_PRIVATE_INTERNAL(NSXMLDocument) return internal->xmlData; } +- (NSString *) XMLStringWithOptions: (NSUInteger)options +{ + NSMutableString *string = [NSMutableString string]; + NSEnumerator *en = [internal->children objectEnumerator]; + id obj = nil; + + [string appendString: @"standalone) + { + [string appendString: @" standalone=\"yes\""]; + } + [string appendString: @"?>\n"]; + + while ((obj = [en nextObject]) != nil) + { + [string appendString: [obj XMLStringWithOptions: options]]; + } + return string; +} + - (id) objectByApplyingXSLT: (NSData*)xslt arguments: (NSDictionary*)arguments error: (NSError**)error @@ -311,17 +339,18 @@ GS_PRIVATE_INTERNAL(NSXMLDocument) qualifiedName: (NSString *)qualifiedName attributes: (NSDictionary *)attributeDict { + NSXMLElement *lastElement = [internal->elementStack lastObject]; NSXMLElement *currentElement = [[NSXMLElement alloc] initWithName: elementName]; + [lastElement addChild: currentElement]; [internal->elementStack addObject: currentElement]; + [currentElement release]; if (internal->rootElement == nil) { [self setRootElement: currentElement]; } - - [currentElement setAttributesAsDictionary: - attributeDict]; + [currentElement setAttributesAsDictionary: attributeDict]; } - (void)parser:(NSXMLParser *)parser diff --git a/Source/NSXMLElement.m b/Source/NSXMLElement.m index b8906f528..038408df3 100644 --- a/Source/NSXMLElement.m +++ b/Source/NSXMLElement.m @@ -125,7 +125,16 @@ GS_PRIVATE_INTERNAL(NSXMLElement) - (void) setAttributesAsDictionary: (NSDictionary*)attributes { - ASSIGN(internal->attributes, [attributes mutableCopy]); + NSEnumerator *en = [attributes keyEnumerator]; + NSString *key; + + while ((key = [en nextObject]) != nil) + { + NSString *val = [attributes objectForKey: key]; + NSXMLNode *attribute = [NSXMLNode attributeWithName: key + stringValue: val]; + [self addAttribute: attribute]; + } } - (NSArray*) attributes @@ -214,13 +223,14 @@ GS_PRIVATE_INTERNAL(NSXMLElement) ASSIGN(internal->children, c); [c release]; - internal->childrenHaveMutated = YES; + // internal->childrenHaveMutated = YES; } - (void) addChild: (NSXMLNode*)child { + [child setParent: self]; [internal->children addObject: child]; - internal->childrenHaveMutated = YES; + // internal->childrenHaveMutated = YES; } - (void) replaceChildAtIndex: (NSUInteger)index withNode: (NSXMLNode*)node