mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-31 16:50:58 +00:00
* 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:
parent
6a39289591
commit
daf08b99a4
3 changed files with 89 additions and 44 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue