diff --git a/ChangeLog b/ChangeLog index cc36be790..fce43647e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2012-03-08 Fred Kiefer + + * Source/NSXMLNode.m (-detach, -_insertChild:atIndex:): Maintain + doc pointer. + * Source/NSXMLDTD.m: Implement a few methods. + 2012-03-08 Fred Kiefer * Source/NSXMLNode.m (+_objectForNode:): Add a few more libxml2 diff --git a/Source/NSXMLDTD.m b/Source/NSXMLDTD.m index a6c2093c9..79a759d84 100644 --- a/Source/NSXMLDTD.m +++ b/Source/NSXMLDTD.m @@ -41,8 +41,6 @@ GS_PRIVATE_INTERNAL(NSXMLDTD) { if (GS_EXISTS_INTERNAL) { - [internal->publicID release]; - [internal->systemID release]; [internal->entities release]; [internal->elements release]; [internal->notations release]; @@ -93,7 +91,7 @@ GS_PRIVATE_INTERNAL(NSXMLDTD) NSXMLDTD *doc; data = [NSData dataWithContentsOfURL: url]; - doc = [self initWithData: data options: 0 error: 0]; + doc = [self initWithData: data options: mask error: error]; [doc setURI: [url absoluteString]]; return doc; } @@ -149,11 +147,9 @@ GS_PRIVATE_INTERNAL(NSXMLDTD) - (NSString*) publicID { - if (internal->publicID == nil) - { - [self notImplemented: _cmd]; - } - return internal->publicID; + xmlDtd *node = MY_DTD; + + return StringFromXMLStringPtr(node->ExternalID); } - (void) removeChildAtIndex: (NSUInteger)index @@ -173,21 +169,23 @@ GS_PRIVATE_INTERNAL(NSXMLDTD) - (void) setPublicID: (NSString*)publicID { - [self notImplemented: _cmd]; + xmlDtd *node = MY_DTD; + + node->ExternalID = XMLStringCopy(publicID); } - (void) setSystemID: (NSString*)systemID { - [self notImplemented: _cmd]; + xmlDtd *node = MY_DTD; + + node->SystemID = XMLStringCopy(systemID); } - (NSString*) systemID { - if (internal->systemID == nil) - { - [self notImplemented: _cmd]; - } - return internal->systemID; + xmlDtd *node = MY_DTD; + + return StringFromXMLStringPtr(node->SystemID); } @end diff --git a/Source/NSXMLNode.m b/Source/NSXMLNode.m index a7c21c6ab..eb5072d63 100644 --- a/Source/NSXMLNode.m +++ b/Source/NSXMLNode.m @@ -413,6 +413,7 @@ isEqualTree(xmlNodePtr nodeA, xmlNodePtr nodeB) * the new node in "by hand" */ childNode->parent = parentNode; + xmlSetTreeDoc(childNode, parentNode->doc); if (curNode) { // insert childNode before an existing node curNode @@ -946,6 +947,7 @@ execute_xpath(NSXMLNode *xmlNode, NSString *xpath_exp, NSString *nmspaces) // separate our node from its parent and siblings xmlUnlinkNode(node); + xmlSetTreeDoc(node, NULL); if (parent) { [parent _removeSubNode: self];