diff --git a/Source/NSXMLDocument.m b/Source/NSXMLDocument.m index d7e4cd3ab..7c9858677 100644 --- a/Source/NSXMLDocument.m +++ b/Source/NSXMLDocument.m @@ -219,7 +219,7 @@ GS_PRIVATE_INTERNAL(NSXMLDocument) [children release]; internal->rootElement = (NSXMLElement*)root; */ - xmlElementPtr newrootnode; + xmlNodePtr newrootnode; NSAssert(root != nil, NSInvalidArgumentException); // Set xmlDocSetRootElement(MY_DOC,[root _node]); diff --git a/Source/NSXMLNode.m b/Source/NSXMLNode.m index b8a7d4b95..facc5eb24 100644 --- a/Source/NSXMLNode.m +++ b/Source/NSXMLNode.m @@ -34,6 +34,7 @@ GS_PRIVATE_INTERNAL(NSXMLNode) - (void *) _node; - (void) _setNode: (void *)_anode; + (NSXMLNode *) _objectForNode: (xmlNodePtr)node; +- (void) _addSubNode:(NSXMLNode *)subNode; @end @implementation NSXMLNode (Private) @@ -50,6 +51,9 @@ GS_PRIVATE_INTERNAL(NSXMLNode) + (NSXMLNode *) _objectForNode: (xmlNodePtr)node { + if (!node) + return nil; + xmlElementType type = node->type; NSXMLNode *result = (id)node->_private; xmlChar *name = NULL; @@ -57,6 +61,7 @@ GS_PRIVATE_INTERNAL(NSXMLNode) if(result == NULL) { + NSXMLNode *parent = nil; switch(type) { case(XML_ELEMENT_NODE): @@ -73,10 +78,22 @@ GS_PRIVATE_INTERNAL(NSXMLNode) } node->_private = result; AUTORELEASE(result); + if (node->parent) + parent = [self _objectForNode:node->parent]; + [parent _addSubNode:result]; } return result; } + +- (void) _addSubNode:(NSXMLNode *)subNode +{ + if (!internal->subNodes) + internal->subNodes = [[NSMutableArray alloc] init]; + if ([internal->subNodes indexOfObjectIdenticalTo:subNode] == NSNotFound) + [internal->subNodes addObject:subNode]; +} + @end @implementation NSXMLNode @@ -323,6 +340,7 @@ GS_PRIVATE_INTERNAL(NSXMLNode) [internal->children release]; [internal->objectValue release]; [internal->stringValue release]; + [internal->subNodes release]; GS_DESTROY_INTERNAL(NSXMLNode); } [super dealloc]; diff --git a/Source/NSXMLPrivate.h b/Source/NSXMLPrivate.h index 43d96048a..d9d56db01 100644 --- a/Source/NSXMLPrivate.h +++ b/Source/NSXMLPrivate.h @@ -112,6 +112,7 @@ StringFromXMLString(const unsigned char *bytes, unsigned length) NSXMLNode *nextSibling;\ NSUInteger options; \ void *node; \ + NSMutableArray *subNodes; \ /* When using the non-fragile ABI, the instance variables are exposed to the