* Source/NSXMLElement.m

* Source/NSXMLNode.m: Corrections to make "basic" tests pass.



git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/branches/nsxml_using_libxml2@34556 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Gregory John Casamento 2012-01-16 18:31:17 +00:00
parent 6a39289591
commit daf08b99a4
3 changed files with 89 additions and 44 deletions

View file

@ -1,3 +1,8 @@
2012-01-16 13:30-EST Gregory John Casamento <greg.casamento@gmail.com>
* Source/NSXMLElement.m
* Source/NSXMLNode.m: Corrections to make "basic" tests pass.
2012-01-15 10:48-EST Gregory John Casamento <greg.casamento@gmail.com> 2012-01-15 10:48-EST Gregory John Casamento <greg.casamento@gmail.com>
* Source/NSXMLNode.m * Source/NSXMLNode.m

View file

@ -44,6 +44,7 @@ extern void clearPrivatePointers(xmlNodePtr aNode);
- (void) dealloc - (void) dealloc
{ {
/*
if (GS_EXISTS_INTERNAL && _internal != nil) if (GS_EXISTS_INTERNAL && _internal != nil)
{ {
while ([self childCount] > 0) while ([self childCount] > 0)
@ -51,6 +52,7 @@ extern void clearPrivatePointers(xmlNodePtr aNode);
[self removeChildAtIndex: [self childCount] - 1]; [self removeChildAtIndex: [self childCount] - 1];
} }
} }
*/
[super dealloc]; [super dealloc];
} }
@ -76,6 +78,7 @@ extern void clearPrivatePointers(xmlNodePtr aNode);
internal->node = (void *)xmlNewNode(NULL,(xmlChar *)[name UTF8String]); internal->node = (void *)xmlNewNode(NULL,(xmlChar *)[name UTF8String]);
((xmlNodePtr)internal->node)->_private = self; ((xmlNodePtr)internal->node)->_private = self;
internal->objectValue = @""; internal->objectValue = @"";
// return self;
} }
return [super initWithKind: kind options: theOptions]; return [super initWithKind: kind options: theOptions];
} }
@ -209,6 +212,7 @@ extern void clearPrivatePointers(xmlNodePtr aNode);
[self notImplemented: _cmd]; [self notImplemented: _cmd];
} }
/*
- (void) setObjectValue: (id)value - (void) setObjectValue: (id)value
{ {
if (nil == value) if (nil == value)
@ -217,6 +221,7 @@ extern void clearPrivatePointers(xmlNodePtr aNode);
} }
ASSIGN(internal->objectValue, value); ASSIGN(internal->objectValue, value);
} }
*/
- (NSArray*) namespaces - (NSArray*) namespaces
{ {

View file

@ -99,6 +99,7 @@ GS_PRIVATE_INTERNAL(NSXMLNode)
return result; return result;
} }
/*
+ (xmlNodePtr) _nodeForObject: (NSXMLNode *)object + (xmlNodePtr) _nodeForObject: (NSXMLNode *)object
{ {
xmlNodePtr node = NULL; xmlNodePtr node = NULL;
@ -115,10 +116,14 @@ GS_PRIVATE_INTERNAL(NSXMLNode)
case(NSXMLElementKind): case(NSXMLElementKind):
node = xmlNewNode(NULL,XMLSTRING([object name])); node = xmlNewNode(NULL,XMLSTRING([object name]));
break; break;
case(NSXMLInvalidKind):
node = xmlNewNode(NULL,XMLSTRING([object name]));
break;
} }
} }
return node; return node;
} }
*/
- (void) _addSubNode:(NSXMLNode *)subNode - (void) _addSubNode:(NSXMLNode *)subNode
{ {
@ -198,10 +203,11 @@ int register_namespaces(xmlXPathContextPtr xpathCtx,
return(0); return(0);
} }
NSArray *execute_xpath(xmlDocPtr doc, NSArray *execute_xpath(NSXMLNode *node,
NSString *xpath_exp, NSString *xpath_exp,
NSString *nmspaces) NSString *nmspaces)
{ {
xmlDocPtr doc = ((xmlNodePtr)[node _node])->doc;
NSMutableArray *result = [NSMutableArray arrayWithCapacity: 10]; NSMutableArray *result = [NSMutableArray arrayWithCapacity: 10];
xmlChar* xpathExpr = (xmlChar *)XMLSTRING(xpath_exp); xmlChar* xpathExpr = (xmlChar *)XMLSTRING(xpath_exp);
xmlChar* nsList = (xmlChar *)XMLSTRING(nmspaces); xmlChar* nsList = (xmlChar *)XMLSTRING(nmspaces);
@ -467,16 +473,23 @@ NSArray *execute_xpath(xmlDocPtr doc,
- (NSArray*) children - (NSArray*) children
{ {
NSMutableArray *childrenArray = [NSMutableArray array]; NSMutableArray *childrenArray = nil;
xmlNodePtr children = NULL; if(NSXMLInvalidKind == internal->kind)
xmlNodePtr node = (xmlNodePtr)(internal->node);
for (children = node->children; children; children = children->next)
{ {
NSXMLNode *n = [NSXMLNode _objectForNode: children]; return nil;
[childrenArray addObject: n]; }
else
{
xmlNodePtr children = NULL;
xmlNodePtr node = (xmlNodePtr)(internal->node);
childrenArray = [NSMutableArray array];
for (children = node->children; children; children = children->next)
{
NSXMLNode *n = [NSXMLNode _objectForNode: children];
[childrenArray addObject: n];
}
} }
return childrenArray; return childrenArray;
} }
@ -504,11 +517,11 @@ NSArray *execute_xpath(xmlDocPtr doc,
if (GS_EXISTS_INTERNAL) if (GS_EXISTS_INTERNAL)
{ {
xmlNodePtr node = (xmlNodePtr)(internal->node); xmlNodePtr node = (xmlNodePtr)(internal->node);
[self detach];
node->_private = NULL;
[internal->URI release]; [internal->URI release];
[internal->objectValue release]; [internal->objectValue release];
[internal->subNodes release]; [internal->subNodes release];
[self detach];
xmlFree(node);
GS_DESTROY_INTERNAL(NSXMLNode); GS_DESTROY_INTERNAL(NSXMLNode);
} }
[super dealloc]; [super dealloc];
@ -517,17 +530,13 @@ NSArray *execute_xpath(xmlDocPtr doc,
- (void) detach - (void) detach
{ {
xmlNodePtr node = (xmlNodePtr)(internal->node); xmlNodePtr node = (xmlNodePtr)(internal->node);
xmlNodePtr parentNode = node->parent; if(node)
NSXMLNode *parent = (parentNode ? parentNode->_private : nil); // get our parent object if it exists
[parent _removeSubNode:self];
xmlUnlinkNode(node);
/*
if (node->parent != nil)
{ {
[(NSXMLElement*)internal->parent removeChildAtIndex: internal->index]; xmlNodePtr parentNode = node->parent;
internal->parent = nil; NSXMLNode *parent = (parentNode ? parentNode->_private : nil); // get our parent object if it exists
[parent _removeSubNode:self];
xmlUnlinkNode(node);
} }
*/
} }
- (NSUInteger) hash - (NSUInteger) hash
@ -561,6 +570,7 @@ NSArray *execute_xpath(xmlDocPtr doc,
- (id) initWithKind: (NSXMLNodeKind)kind options: (NSUInteger)theOptions - (id) initWithKind: (NSXMLNodeKind)kind options: (NSUInteger)theOptions
{ {
Class theSubclass = [NSXMLNode class]; Class theSubclass = [NSXMLNode class];
void *node = NULL;
if (nil == (self = [super init])) if (nil == (self = [super init]))
{ {
@ -572,26 +582,30 @@ NSArray *execute_xpath(xmlDocPtr doc,
*/ */
switch (kind) switch (kind)
{ {
case NSXMLDocumentKind: case NSXMLDocumentKind:
theSubclass = [NSXMLDocument class]; node = xmlNewDoc((xmlChar *)"1.0");
break; theSubclass = [NSXMLDocument class];
break;
case NSXMLElementKind:
theSubclass = [NSXMLElement class]; case NSXMLInvalidKind:
break; case NSXMLElementKind:
node = xmlNewNode(NULL,(xmlChar *)"");
case NSXMLDTDKind: theSubclass = [NSXMLElement class];
theSubclass = [NSXMLDTD class]; break;
break;
case NSXMLDTDKind:
case NSXMLEntityDeclarationKind: node = xmlNewDtd(NULL, NULL, NULL,NULL);
case NSXMLElementDeclarationKind: theSubclass = [NSXMLDTD class];
case NSXMLNotationDeclarationKind: break;
theSubclass = [NSXMLDTDNode class];
break; case NSXMLEntityDeclarationKind:
case NSXMLElementDeclarationKind:
default: case NSXMLNotationDeclarationKind:
break; theSubclass = [NSXMLDTDNode class];
break;
default:
break;
} }
/* /*
@ -608,7 +622,11 @@ NSArray *execute_xpath(xmlDocPtr doc,
/* Create holder for internal instance variables if needed. /* Create holder for internal instance variables if needed.
*/ */
GS_CREATE_INTERNAL(NSXMLNode) GS_CREATE_INTERNAL(NSXMLNode);
/* Create libxml object to go with it...
*/
[self _setNode: node];
/* If we are initializing for the correct class, we can actually perform /* If we are initializing for the correct class, we can actually perform
* initializations: * initializations:
@ -684,6 +702,10 @@ NSArray *execute_xpath(xmlDocPtr doc,
- (NSString*) name - (NSString*) name
{ {
if(NSXMLInvalidKind == internal->kind)
{
return nil;
}
return StringFromXMLStringPtr(MY_NODE->name); return StringFromXMLStringPtr(MY_NODE->name);
} }
@ -806,15 +828,28 @@ NSArray *execute_xpath(xmlDocPtr doc,
- (NSString*) stringValue - (NSString*) stringValue
{ {
xmlNodePtr node = MY_NODE; xmlNodePtr node = MY_NODE;
if (node->type == XML_ATTRIBUTE_NODE) xmlChar *content = xmlNodeGetContent(node);
NSString *result = nil;
/*
if (node->type == XML_ATTRIBUTE_NODE ||
node->type == XML_ELEMENT_NODE)
{ {
node = node->children; node = node->children;
} }
return StringFromXMLStringPtr(node->content); */
result = StringFromXMLStringPtr(content);
return result;
} }
- (NSString*) URI - (NSString*) URI
{ {
if(NSXMLInvalidKind == internal->kind)
{
return nil;
}
return internal->URI; // FIXME ... fetch from libxml return internal->URI; // FIXME ... fetch from libxml
} }
@ -897,7 +932,7 @@ NSArray *execute_xpath(xmlDocPtr doc,
- (NSArray*) nodesForXPath: (NSString*)anxpath error: (NSError**)error - (NSArray*) nodesForXPath: (NSString*)anxpath error: (NSError**)error
{ {
*error = NULL; *error = NULL;
return execute_xpath(MY_NODE->doc, anxpath, NULL); return execute_xpath(self, anxpath, NULL);
} }
- (NSArray*) objectsForXQuery: (NSString*)xquery - (NSArray*) objectsForXQuery: (NSString*)xquery