mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-30 16:30:41 +00:00
restructure a bit to make it easier to add namespace support.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@34924 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
765ad1d32c
commit
f3da6a5455
9 changed files with 385 additions and 106 deletions
13
ChangeLog
13
ChangeLog
|
@ -1,3 +1,16 @@
|
||||||
|
2012-03-11 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
|
* Source/NSXMLNamespace.m: New class for namespaces
|
||||||
|
* Source/GNUmakefile: Build with new class
|
||||||
|
* Source/NSXMLDocument.m:
|
||||||
|
* Source/NSXMLPrivate.h:
|
||||||
|
* Source/NSXMLDTD.m:
|
||||||
|
* Source/NSXMLNode.m:
|
||||||
|
* Source/NSXMLDTDNode.m:
|
||||||
|
* Source/NSXMLElement.m:
|
||||||
|
Use a new class for namespaces ... just a placeholder/skeleton so far.
|
||||||
|
Change other classes to know the correct type of their 'node' pointer.
|
||||||
|
|
||||||
2012-03-11 Richard Frith-Macdonald <rfm@gnu.org>
|
2012-03-11 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
* Source/NSXMLNode.m: Avoid crash when trying to get the parent of a
|
* Source/NSXMLNode.m: Avoid crash when trying to get the parent of a
|
||||||
|
|
|
@ -286,6 +286,7 @@ NSXMLDocument.m \
|
||||||
NSXMLDTD.m \
|
NSXMLDTD.m \
|
||||||
NSXMLDTDNode.m \
|
NSXMLDTDNode.m \
|
||||||
NSXMLElement.m \
|
NSXMLElement.m \
|
||||||
|
NSXMLNamespace.m \
|
||||||
NSXMLNode.m \
|
NSXMLNode.m \
|
||||||
NSXMLParser.m \
|
NSXMLParser.m \
|
||||||
NSZone.m \
|
NSZone.m \
|
||||||
|
|
|
@ -24,7 +24,9 @@
|
||||||
|
|
||||||
#import "common.h"
|
#import "common.h"
|
||||||
|
|
||||||
#define GSInternal NSXMLDTDInternal
|
#define GS_XMLNODETYPE xmlDtd
|
||||||
|
#define GSInternal NSXMLDTDInternal
|
||||||
|
|
||||||
#import "NSXMLPrivate.h"
|
#import "NSXMLPrivate.h"
|
||||||
#import "GSInternal.h"
|
#import "GSInternal.h"
|
||||||
GS_PRIVATE_INTERNAL(NSXMLDTD)
|
GS_PRIVATE_INTERNAL(NSXMLDTD)
|
||||||
|
@ -147,7 +149,7 @@ GS_PRIVATE_INTERNAL(NSXMLDTD)
|
||||||
|
|
||||||
- (NSString*) publicID
|
- (NSString*) publicID
|
||||||
{
|
{
|
||||||
xmlDtd *node = MY_DTD;
|
xmlDtd *node = internal->node;
|
||||||
|
|
||||||
return StringFromXMLStringPtr(node->ExternalID);
|
return StringFromXMLStringPtr(node->ExternalID);
|
||||||
}
|
}
|
||||||
|
@ -169,21 +171,21 @@ GS_PRIVATE_INTERNAL(NSXMLDTD)
|
||||||
|
|
||||||
- (void) setPublicID: (NSString*)publicID
|
- (void) setPublicID: (NSString*)publicID
|
||||||
{
|
{
|
||||||
xmlDtd *node = MY_DTD;
|
xmlDtd *node = internal->node;
|
||||||
|
|
||||||
node->ExternalID = XMLStringCopy(publicID);
|
node->ExternalID = XMLStringCopy(publicID);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setSystemID: (NSString*)systemID
|
- (void) setSystemID: (NSString*)systemID
|
||||||
{
|
{
|
||||||
xmlDtd *node = MY_DTD;
|
xmlDtd *node = internal->node;
|
||||||
|
|
||||||
node->SystemID = XMLStringCopy(systemID);
|
node->SystemID = XMLStringCopy(systemID);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString*) systemID
|
- (NSString*) systemID
|
||||||
{
|
{
|
||||||
xmlDtd *node = MY_DTD;
|
xmlDtd *node = internal->node;
|
||||||
|
|
||||||
return StringFromXMLStringPtr(node->SystemID);
|
return StringFromXMLStringPtr(node->SystemID);
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,9 @@
|
||||||
|
|
||||||
#import "common.h"
|
#import "common.h"
|
||||||
|
|
||||||
#define GSInternal NSXMLDTDNodeInternal
|
#define GS_XMLNODETYPE xmlDtd
|
||||||
|
#define GSInternal NSXMLDTDNodeInternal
|
||||||
|
|
||||||
#import "NSXMLPrivate.h"
|
#import "NSXMLPrivate.h"
|
||||||
#import "GSInternal.h"
|
#import "GSInternal.h"
|
||||||
GS_PRIVATE_INTERNAL(NSXMLDTDNode)
|
GS_PRIVATE_INTERNAL(NSXMLDTDNode)
|
||||||
|
@ -85,12 +87,12 @@ GS_PRIVATE_INTERNAL(NSXMLDTDNode)
|
||||||
|
|
||||||
- (NSString*) notationName
|
- (NSString*) notationName
|
||||||
{
|
{
|
||||||
return StringFromXMLStringPtr(MY_DTD->name);
|
return StringFromXMLStringPtr(internal->node->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString*) publicID
|
- (NSString*) publicID
|
||||||
{
|
{
|
||||||
return StringFromXMLStringPtr(MY_DTD->ExternalID);
|
return StringFromXMLStringPtr(internal->node->ExternalID);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setDTDKind: (NSXMLDTDNodeKind)kind
|
- (void) setDTDKind: (NSXMLDTDNodeKind)kind
|
||||||
|
@ -100,22 +102,22 @@ GS_PRIVATE_INTERNAL(NSXMLDTDNode)
|
||||||
|
|
||||||
- (void) setNotationName: (NSString*)notationName
|
- (void) setNotationName: (NSString*)notationName
|
||||||
{
|
{
|
||||||
MY_DTD->name = XMLSTRING(notationName);
|
internal->node->name = XMLSTRING(notationName);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setPublicID: (NSString*)publicID
|
- (void) setPublicID: (NSString*)publicID
|
||||||
{
|
{
|
||||||
MY_DTD->ExternalID = XMLSTRING(publicID);
|
internal->node->ExternalID = XMLSTRING(publicID);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setSystemID: (NSString*)systemID
|
- (void) setSystemID: (NSString*)systemID
|
||||||
{
|
{
|
||||||
MY_DTD->ExternalID = XMLSTRING(systemID);
|
internal->node->ExternalID = XMLSTRING(systemID);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString*) systemID
|
- (NSString*) systemID
|
||||||
{
|
{
|
||||||
return StringFromXMLStringPtr(MY_DTD->SystemID);
|
return StringFromXMLStringPtr(internal->node->SystemID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -25,7 +25,9 @@
|
||||||
|
|
||||||
#import "common.h"
|
#import "common.h"
|
||||||
|
|
||||||
#define GSInternal NSXMLDocumentInternal
|
#define GS_XMLNODETYPE xmlDoc
|
||||||
|
#define GSInternal NSXMLDocumentInternal
|
||||||
|
|
||||||
#import "NSXMLPrivate.h"
|
#import "NSXMLPrivate.h"
|
||||||
#import "GSInternal.h"
|
#import "GSInternal.h"
|
||||||
|
|
||||||
|
@ -55,8 +57,8 @@ GS_PRIVATE_INTERNAL(NSXMLDocument)
|
||||||
|
|
||||||
- (NSString*) characterEncoding
|
- (NSString*) characterEncoding
|
||||||
{
|
{
|
||||||
if (MY_DOC->encoding)
|
if (internal->node->encoding)
|
||||||
return StringFromXMLStringPtr(MY_DOC->encoding);
|
return StringFromXMLStringPtr(internal->node->encoding);
|
||||||
else
|
else
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
@ -193,7 +195,7 @@ GS_PRIVATE_INTERNAL(NSXMLDocument)
|
||||||
|
|
||||||
- (BOOL) isStandalone
|
- (BOOL) isStandalone
|
||||||
{
|
{
|
||||||
return (MY_DOC->standalone == 1);
|
return (internal->node->standalone == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString*) MIMEType
|
- (NSString*) MIMEType
|
||||||
|
@ -203,13 +205,13 @@ GS_PRIVATE_INTERNAL(NSXMLDocument)
|
||||||
|
|
||||||
- (NSXMLElement*) rootElement
|
- (NSXMLElement*) rootElement
|
||||||
{
|
{
|
||||||
xmlNodePtr rootElem = xmlDocGetRootElement(MY_DOC);
|
xmlNodePtr rootElem = xmlDocGetRootElement(internal->node);
|
||||||
return (NSXMLElement *)[NSXMLNode _objectForNode: rootElem];
|
return (NSXMLElement *)[NSXMLNode _objectForNode: rootElem];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setCharacterEncoding: (NSString*)encoding
|
- (void) setCharacterEncoding: (NSString*)encoding
|
||||||
{
|
{
|
||||||
MY_DOC->encoding = XMLStringCopy(encoding);
|
internal->node->encoding = XMLStringCopy(encoding);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setDocumentContentKind: (NSXMLDocumentContentKind)kind
|
- (void) setDocumentContentKind: (NSXMLDocumentContentKind)kind
|
||||||
|
@ -221,7 +223,7 @@ GS_PRIVATE_INTERNAL(NSXMLDocument)
|
||||||
{
|
{
|
||||||
NSAssert(documentTypeDeclaration != nil, NSInvalidArgumentException);
|
NSAssert(documentTypeDeclaration != nil, NSInvalidArgumentException);
|
||||||
ASSIGNCOPY(internal->docType, documentTypeDeclaration);
|
ASSIGNCOPY(internal->docType, documentTypeDeclaration);
|
||||||
MY_DOC->extSubset = [documentTypeDeclaration _node];
|
internal->node->extSubset = [documentTypeDeclaration _node];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setMIMEType: (NSString*)MIMEType
|
- (void) setMIMEType: (NSString*)MIMEType
|
||||||
|
@ -247,7 +249,7 @@ GS_PRIVATE_INTERNAL(NSXMLDocument)
|
||||||
|
|
||||||
// FIXME: Should remove all sub nodes
|
// FIXME: Should remove all sub nodes
|
||||||
|
|
||||||
xmlDocSetRootElement(MY_DOC, [root _node]);
|
xmlDocSetRootElement(internal->node, [root _node]);
|
||||||
|
|
||||||
// Do our subNode housekeeping...
|
// Do our subNode housekeeping...
|
||||||
[self _removeSubNode: oldElement];
|
[self _removeSubNode: oldElement];
|
||||||
|
@ -256,14 +258,14 @@ GS_PRIVATE_INTERNAL(NSXMLDocument)
|
||||||
|
|
||||||
- (void) setStandalone: (BOOL)standalone
|
- (void) setStandalone: (BOOL)standalone
|
||||||
{
|
{
|
||||||
MY_DOC->standalone = standalone;
|
internal->node->standalone = standalone;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setVersion: (NSString*)version
|
- (void) setVersion: (NSString*)version
|
||||||
{
|
{
|
||||||
if ([version isEqualToString: @"1.0"] || [version isEqualToString: @"1.1"])
|
if ([version isEqualToString: @"1.0"] || [version isEqualToString: @"1.1"])
|
||||||
{
|
{
|
||||||
MY_DOC->version = XMLStringCopy(version);
|
internal->node->version = XMLStringCopy(version);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -274,8 +276,8 @@ GS_PRIVATE_INTERNAL(NSXMLDocument)
|
||||||
|
|
||||||
- (NSString*) version
|
- (NSString*) version
|
||||||
{
|
{
|
||||||
if (MY_DOC->version)
|
if (internal->node->version)
|
||||||
return StringFromXMLStringPtr(MY_DOC->version);
|
return StringFromXMLStringPtr(internal->node->version);
|
||||||
else
|
else
|
||||||
return @"1.0";
|
return @"1.0";
|
||||||
}
|
}
|
||||||
|
@ -369,7 +371,7 @@ GS_PRIVATE_INTERNAL(NSXMLDocument)
|
||||||
xmlChar *buf = NULL;
|
xmlChar *buf = NULL;
|
||||||
int length;
|
int length;
|
||||||
|
|
||||||
xmlDocDumpFormatMemoryEnc(MY_DOC, &buf, &length, "utf-8",
|
xmlDocDumpFormatMemoryEnc(internal->node, &buf, &length, "utf-8",
|
||||||
((options & NSXMLNodePrettyPrint) ? 1 : 0));
|
((options & NSXMLNodePrettyPrint) ? 1 : 0));
|
||||||
|
|
||||||
if (buf != 0 && length > 0)
|
if (buf != 0 && length > 0)
|
||||||
|
@ -409,7 +411,8 @@ GS_PRIVATE_INTERNAL(NSXMLDocument)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Apply the stylesheet and get the result...
|
// Apply the stylesheet and get the result...
|
||||||
resultDoc = xsltApplyStylesheet(stylesheet, MY_DOC, (const char **)params);
|
resultDoc
|
||||||
|
= xsltApplyStylesheet(stylesheet, internal->node, (const char **)params);
|
||||||
|
|
||||||
// Cleanup...
|
// Cleanup...
|
||||||
xsltFreeStylesheet(stylesheet);
|
xsltFreeStylesheet(stylesheet);
|
||||||
|
@ -451,7 +454,7 @@ GS_PRIVATE_INTERNAL(NSXMLDocument)
|
||||||
xmlValidCtxtPtr ctxt = xmlNewValidCtxt();
|
xmlValidCtxtPtr ctxt = xmlNewValidCtxt();
|
||||||
// FIXME: Should use xmlValidityErrorFunc and userData
|
// FIXME: Should use xmlValidityErrorFunc and userData
|
||||||
// to get the error
|
// to get the error
|
||||||
BOOL result = (BOOL)(xmlValidateDocument(ctxt, MY_DOC));
|
BOOL result = (BOOL)(xmlValidateDocument(ctxt, internal->node));
|
||||||
xmlFreeValidCtxt(ctxt);
|
xmlFreeValidCtxt(ctxt);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,9 @@
|
||||||
|
|
||||||
#import "common.h"
|
#import "common.h"
|
||||||
|
|
||||||
#define GSInternal NSXMLElementInternal
|
#define GSInternal NSXMLElementInternal
|
||||||
|
#define GS_XMLNODETYPE xmlNode
|
||||||
|
|
||||||
#import "NSXMLPrivate.h"
|
#import "NSXMLPrivate.h"
|
||||||
#import "GSInternal.h"
|
#import "GSInternal.h"
|
||||||
GS_PRIVATE_INTERNAL(NSXMLElement)
|
GS_PRIVATE_INTERNAL(NSXMLElement)
|
||||||
|
@ -133,7 +135,7 @@ GS_PRIVATE_INTERNAL(NSXMLElement)
|
||||||
NSMutableArray *results = [NSMutableArray arrayWithCapacity: 10];
|
NSMutableArray *results = [NSMutableArray arrayWithCapacity: 10];
|
||||||
xmlNodePtr cur = NULL;
|
xmlNodePtr cur = NULL;
|
||||||
|
|
||||||
for (cur = MY_NODE->children; cur != NULL; cur = cur->next)
|
for (cur = internal->node->children; cur != NULL; cur = cur->next)
|
||||||
{
|
{
|
||||||
NSString *n = StringFromXMLStringPtr(cur->name);
|
NSString *n = StringFromXMLStringPtr(cur->name);
|
||||||
if ([n isEqualToString: name])
|
if ([n isEqualToString: name])
|
||||||
|
@ -154,7 +156,7 @@ GS_PRIVATE_INTERNAL(NSXMLElement)
|
||||||
|
|
||||||
- (void) addAttribute: (NSXMLNode*)attribute
|
- (void) addAttribute: (NSXMLNode*)attribute
|
||||||
{
|
{
|
||||||
xmlNodePtr node = MY_NODE;
|
xmlNodePtr node = internal->node;
|
||||||
xmlAttrPtr attr = (xmlAttrPtr)[attribute _node];
|
xmlAttrPtr attr = (xmlAttrPtr)[attribute _node];
|
||||||
xmlAttrPtr oldAttr = xmlHasProp(node, attr->name);
|
xmlAttrPtr oldAttr = xmlHasProp(node, attr->name);
|
||||||
|
|
||||||
|
@ -194,7 +196,7 @@ GS_PRIVATE_INTERNAL(NSXMLElement)
|
||||||
|
|
||||||
- (void) removeAttributeForName: (NSString*)name
|
- (void) removeAttributeForName: (NSString*)name
|
||||||
{
|
{
|
||||||
xmlNodePtr node = MY_NODE;
|
xmlNodePtr node = internal->node;
|
||||||
xmlAttrPtr attr = xmlHasProp(node, XMLSTRING(name));
|
xmlAttrPtr attr = xmlHasProp(node, XMLSTRING(name));
|
||||||
NSXMLNode *attrNode = nil;
|
NSXMLNode *attrNode = nil;
|
||||||
|
|
||||||
|
@ -242,7 +244,7 @@ GS_PRIVATE_INTERNAL(NSXMLElement)
|
||||||
- (NSArray*) attributes
|
- (NSArray*) attributes
|
||||||
{
|
{
|
||||||
NSMutableArray *attributes = [NSMutableArray array];
|
NSMutableArray *attributes = [NSMutableArray array];
|
||||||
xmlNodePtr node = MY_NODE;
|
xmlNodePtr node = internal->node;
|
||||||
xmlAttrPtr attributeNode = node->properties;
|
xmlAttrPtr attributeNode = node->properties;
|
||||||
|
|
||||||
while (attributeNode)
|
while (attributeNode)
|
||||||
|
@ -259,7 +261,7 @@ GS_PRIVATE_INTERNAL(NSXMLElement)
|
||||||
- (NSXMLNode*) attributeForName: (NSString*)name
|
- (NSXMLNode*) attributeForName: (NSString*)name
|
||||||
{
|
{
|
||||||
NSXMLNode *result = nil;
|
NSXMLNode *result = nil;
|
||||||
xmlAttrPtr attributeNode = xmlHasProp(MY_NODE, XMLSTRING(name));
|
xmlAttrPtr attributeNode = xmlHasProp(internal->node, XMLSTRING(name));
|
||||||
|
|
||||||
if (NULL != attributeNode)
|
if (NULL != attributeNode)
|
||||||
{
|
{
|
||||||
|
@ -280,13 +282,13 @@ GS_PRIVATE_INTERNAL(NSXMLElement)
|
||||||
{
|
{
|
||||||
xmlNsPtr ns = (xmlNsPtr)[aNamespace _node];
|
xmlNsPtr ns = (xmlNsPtr)[aNamespace _node];
|
||||||
|
|
||||||
if (MY_NODE->ns == NULL)
|
if (internal->node->ns == NULL)
|
||||||
{
|
{
|
||||||
MY_NODE->ns = ns;
|
internal->node->ns = ns;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
xmlNsPtr cur = MY_NODE->ns;
|
xmlNsPtr cur = internal->node->ns;
|
||||||
const xmlChar *prefix = ns->prefix;
|
const xmlChar *prefix = ns->prefix;
|
||||||
|
|
||||||
while (xmlStrcmp(prefix, cur->prefix) != 0)
|
while (xmlStrcmp(prefix, cur->prefix) != 0)
|
||||||
|
@ -313,14 +315,14 @@ GS_PRIVATE_INTERNAL(NSXMLElement)
|
||||||
xmlNsPtr cur = NULL;
|
xmlNsPtr cur = NULL;
|
||||||
|
|
||||||
// FIXME: Remove old namespaces
|
// FIXME: Remove old namespaces
|
||||||
// xmlFreeNsList(MY_NODE->ns);
|
// xmlFreeNsList(internal->node->ns);
|
||||||
// MY_NODE->ns = NULL;
|
// internal->node->ns = NULL;
|
||||||
while ((namespace = (NSXMLNode *)[en nextObject]) != nil)
|
while ((namespace = (NSXMLNode *)[en nextObject]) != nil)
|
||||||
{
|
{
|
||||||
xmlNsPtr ns = (xmlNsPtr)[namespace _node];
|
xmlNsPtr ns = (xmlNsPtr)[namespace _node];
|
||||||
if (MY_NODE->ns == NULL)
|
if (internal->node->ns == NULL)
|
||||||
{
|
{
|
||||||
MY_NODE->ns = ns;
|
internal->node->ns = ns;
|
||||||
cur = ns;
|
cur = ns;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -335,7 +337,7 @@ GS_PRIVATE_INTERNAL(NSXMLElement)
|
||||||
{
|
{
|
||||||
// FIXME: Should use xmlGetNsList()
|
// FIXME: Should use xmlGetNsList()
|
||||||
NSMutableArray *result = nil;
|
NSMutableArray *result = nil;
|
||||||
xmlNsPtr ns = MY_NODE->ns;
|
xmlNsPtr ns = internal->node->ns;
|
||||||
|
|
||||||
if (ns)
|
if (ns)
|
||||||
{
|
{
|
||||||
|
@ -353,7 +355,7 @@ GS_PRIVATE_INTERNAL(NSXMLElement)
|
||||||
- (NSXMLNode*) namespaceForPrefix: (NSString*)name
|
- (NSXMLNode*) namespaceForPrefix: (NSString*)name
|
||||||
{
|
{
|
||||||
// FIXME: Should use xmlSearchNs()
|
// FIXME: Should use xmlSearchNs()
|
||||||
xmlNsPtr ns = MY_NODE->ns;
|
xmlNsPtr ns = internal->node->ns;
|
||||||
if (ns)
|
if (ns)
|
||||||
{
|
{
|
||||||
const xmlChar *prefix = XMLSTRING(name);
|
const xmlChar *prefix = XMLSTRING(name);
|
||||||
|
@ -385,7 +387,7 @@ GS_PRIVATE_INTERNAL(NSXMLElement)
|
||||||
- (NSString*) resolvePrefixForNamespaceURI: (NSString*)namespaceURI
|
- (NSString*) resolvePrefixForNamespaceURI: (NSString*)namespaceURI
|
||||||
{
|
{
|
||||||
// FIXME Should use xmlSearchNsByHref()
|
// FIXME Should use xmlSearchNsByHref()
|
||||||
xmlNsPtr ns = MY_NODE->ns;
|
xmlNsPtr ns = internal->node->ns;
|
||||||
|
|
||||||
if (ns)
|
if (ns)
|
||||||
{
|
{
|
||||||
|
|
280
Source/NSXMLNamespace.m
Normal file
280
Source/NSXMLNamespace.m
Normal file
|
@ -0,0 +1,280 @@
|
||||||
|
/* Implementation for NSXMLNamespace for GNUStep
|
||||||
|
Copyright (C) 2008 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
Written by: Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
Created: September 2008
|
||||||
|
|
||||||
|
This file is part of the GNUstep Base Library.
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 3 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with this library; if not, write to the Free
|
||||||
|
Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||||
|
Boston, MA 02111 USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#import "common.h"
|
||||||
|
|
||||||
|
#define GSInternal NSXMLNamespaceInternal
|
||||||
|
#define GS_XMLNODETYPE xmlNs
|
||||||
|
|
||||||
|
#import "NSXMLPrivate.h"
|
||||||
|
|
||||||
|
@interface NSXMLNamespace : NSXMLNode
|
||||||
|
{
|
||||||
|
@public GS_NSXMLNamespace_IVARS
|
||||||
|
/* The pointer to private additional data used to avoid breaking ABI
|
||||||
|
* when we don't have the non-fragile ABI available is inherited from
|
||||||
|
* NSXMLNode. See Source/GSInternal.h for details.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
#import "GSInternal.h"
|
||||||
|
GS_PRIVATE_INTERNAL(NSXMLNamespace)
|
||||||
|
|
||||||
|
#if defined(HAVE_LIBXML)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
clearPrivatePointers(xmlNodePtr aNode)
|
||||||
|
{
|
||||||
|
if (!aNode)
|
||||||
|
return;
|
||||||
|
aNode->_private = NULL;
|
||||||
|
clearPrivatePointers(aNode->children);
|
||||||
|
clearPrivatePointers(aNode->next);
|
||||||
|
if (aNode->type == XML_ELEMENT_NODE)
|
||||||
|
clearPrivatePointers((xmlNodePtr)(aNode->properties));
|
||||||
|
// FIXME: Handle more node types
|
||||||
|
}
|
||||||
|
|
||||||
|
@implementation NSXMLNamespace
|
||||||
|
|
||||||
|
- (NSString*) canonicalXMLStringPreservingComments: (BOOL)comments
|
||||||
|
{
|
||||||
|
return [self notImplemented: _cmd]; // FIXME ... generate from libxml
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSXMLNode*) childAtIndex: (NSUInteger)index
|
||||||
|
{
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSUInteger) childCount
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSArray*) children
|
||||||
|
{
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id) copyWithZone: (NSZone*)zone
|
||||||
|
{
|
||||||
|
NSXMLNamespace *c = [[self class] allocWithZone: zone];
|
||||||
|
|
||||||
|
// FIXME
|
||||||
|
|
||||||
|
GSIVar(c, options) = internal->options;
|
||||||
|
if (nil != internal->objectValue)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Only copy the objectValue when externally set.
|
||||||
|
The problem here are nodes created by parsing XML.
|
||||||
|
There the stringValue may be set, but the objectValue isn't.
|
||||||
|
This should rather be solved by creating a suitable objectValue,
|
||||||
|
when the node gets instantiated.
|
||||||
|
*/
|
||||||
|
[c setObjectValue: internal->objectValue];
|
||||||
|
}
|
||||||
|
[c setURI: [self URI]];
|
||||||
|
// [c setName: [self name]];
|
||||||
|
// [c setStringValue: [self stringValue]];
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString*) description
|
||||||
|
{
|
||||||
|
return [NSString stringWithFormat:@"<%@ %@ %d>%@\n",
|
||||||
|
NSStringFromClass([self class]),
|
||||||
|
[self name], [self kind], [self XMLString]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) dealloc
|
||||||
|
{
|
||||||
|
if (GS_EXISTS_INTERNAL)
|
||||||
|
{
|
||||||
|
xmlNs *old = internal->node;
|
||||||
|
// FIXME
|
||||||
|
if (old)
|
||||||
|
{
|
||||||
|
old->_private = NULL;
|
||||||
|
xmlFreeNs(old);
|
||||||
|
}
|
||||||
|
GS_DESTROY_INTERNAL(NSXMLNode);
|
||||||
|
}
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) detach
|
||||||
|
{
|
||||||
|
xmlNsPtr ns = internal->node;
|
||||||
|
|
||||||
|
if (ns)
|
||||||
|
{
|
||||||
|
// FIXME
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSUInteger) hash
|
||||||
|
{
|
||||||
|
return [[self name] hash];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSUInteger) index
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id) init
|
||||||
|
{
|
||||||
|
return [self initWithKind: NSXMLNamespaceKind];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSUInteger) level
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString*) localName
|
||||||
|
{
|
||||||
|
return [[self class] localNameForName: [self name]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString*) name
|
||||||
|
{
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSXMLNode*) nextNode
|
||||||
|
{
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSXMLNode*) nextSibling
|
||||||
|
{
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id) objectValue
|
||||||
|
{
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSXMLNode*) parent
|
||||||
|
{
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString*) prefix
|
||||||
|
{
|
||||||
|
return StringFromXMLStringPtr(internal->node->prefix);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSXMLNode*) previousNode
|
||||||
|
{
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSXMLNode*) previousSibling
|
||||||
|
{
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSXMLDocument*) rootDocument
|
||||||
|
{
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString*) stringValue
|
||||||
|
{
|
||||||
|
return StringFromXMLStringPtr(internal->node->href);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) setObjectValue: (id)value
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) setName: (NSString *)name
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) setStringValue: (NSString*)string
|
||||||
|
{
|
||||||
|
[self setStringValue: string resolvingEntities: NO];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) setStringValue: (NSString*)string resolvingEntities: (BOOL)resolve
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) setURI: (NSString*)URI
|
||||||
|
{
|
||||||
|
//xmlNodeSetBase(internal->node, XMLSTRING(URI));
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString*) URI
|
||||||
|
{
|
||||||
|
return StringFromXMLStringPtr(internal->node->href);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString*) XMLString
|
||||||
|
{
|
||||||
|
return [self XMLStringWithOptions: NSXMLNodeOptionsNone];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString*) XMLStringWithOptions: (NSUInteger)options
|
||||||
|
{
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSString*) XPath
|
||||||
|
{
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSArray*) nodesForXPath: (NSString*)anxpath error: (NSError**)error
|
||||||
|
{
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSArray*) objectsForXQuery: (NSString*)xquery
|
||||||
|
constants: (NSDictionary*)constants
|
||||||
|
error: (NSError**)error
|
||||||
|
{
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSArray*) objectsForXQuery: (NSString*)xquery error: (NSError**)error
|
||||||
|
{
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif
|
|
@ -24,15 +24,16 @@
|
||||||
|
|
||||||
#import "common.h"
|
#import "common.h"
|
||||||
|
|
||||||
#define GSInternal NSXMLNodeInternal
|
#define GSInternal NSXMLNodeInternal
|
||||||
|
#define GS_XMLNODETYPE xmlNode
|
||||||
|
|
||||||
#import "NSXMLPrivate.h"
|
#import "NSXMLPrivate.h"
|
||||||
#import "GSInternal.h"
|
#import "GSInternal.h"
|
||||||
GS_PRIVATE_INTERNAL(NSXMLNode)
|
GS_PRIVATE_INTERNAL(NSXMLNode)
|
||||||
|
|
||||||
#if defined(HAVE_LIBXML)
|
#if defined(HAVE_LIBXML)
|
||||||
|
|
||||||
@interface NSXMLNamespaceNode : NSXMLNode
|
@class NSXMLNamespace;
|
||||||
@end
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
countAttributes(xmlNodePtr node)
|
countAttributes(xmlNodePtr node)
|
||||||
|
@ -209,26 +210,10 @@ isEqualTree(xmlNodePtr nodeA, xmlNodePtr nodeB)
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME ... the libxml2 data structure representing a namespace has a
|
|
||||||
* completely different layout from that of almost all other nodes, so
|
|
||||||
* the generix NSXMLNode code won't work and we need to override every
|
|
||||||
* method we use!
|
|
||||||
*/
|
|
||||||
@implementation NSXMLNamespaceNode
|
|
||||||
- (NSUInteger) level
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
- (NSXMLNode*) parent
|
|
||||||
{
|
|
||||||
return nil;
|
|
||||||
}
|
|
||||||
@end
|
|
||||||
|
|
||||||
@implementation NSXMLNode (Private)
|
@implementation NSXMLNode (Private)
|
||||||
- (void *) _node
|
- (void *) _node
|
||||||
{
|
{
|
||||||
return MY_NODE;
|
return internal->node;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) _setNode: (void *)_anode
|
- (void) _setNode: (void *)_anode
|
||||||
|
@ -379,7 +364,7 @@ isEqualTree(xmlNodePtr nodeA, xmlNodePtr nodeB)
|
||||||
- (xmlNodePtr) _childNodeAtIndex: (NSUInteger)index
|
- (xmlNodePtr) _childNodeAtIndex: (NSUInteger)index
|
||||||
{
|
{
|
||||||
NSUInteger count = 0;
|
NSUInteger count = 0;
|
||||||
xmlNodePtr node = MY_NODE;
|
xmlNodePtr node = internal->node;
|
||||||
xmlNodePtr children = node->children;
|
xmlNodePtr children = node->children;
|
||||||
|
|
||||||
if (!children)
|
if (!children)
|
||||||
|
@ -403,7 +388,7 @@ isEqualTree(xmlNodePtr nodeA, xmlNodePtr nodeB)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Get all of the nodes...
|
// Get all of the nodes...
|
||||||
xmlNodePtr parentNode = MY_NODE; // we are the parent
|
xmlNodePtr parentNode = internal->node; // we are the parent
|
||||||
xmlNodePtr childNode = (xmlNodePtr)[child _node];
|
xmlNodePtr childNode = (xmlNodePtr)[child _node];
|
||||||
xmlNodePtr curNode = [self _childNodeAtIndex: index];
|
xmlNodePtr curNode = [self _childNodeAtIndex: index];
|
||||||
BOOL mergeTextNodes = NO; // is there a defined option for this?
|
BOOL mergeTextNodes = NO; // is there a defined option for this?
|
||||||
|
@ -857,7 +842,7 @@ execute_xpath(NSXMLNode *xmlNode, NSString *xpath_exp, NSString *nmspaces)
|
||||||
{
|
{
|
||||||
NSUInteger count = 0;
|
NSUInteger count = 0;
|
||||||
xmlNodePtr children = NULL;
|
xmlNodePtr children = NULL;
|
||||||
xmlNodePtr node = MY_NODE;
|
xmlNodePtr node = internal->node;
|
||||||
|
|
||||||
if (!node)
|
if (!node)
|
||||||
{
|
{
|
||||||
|
@ -883,7 +868,7 @@ execute_xpath(NSXMLNode *xmlNode, NSString *xpath_exp, NSString *nmspaces)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
xmlNodePtr children = NULL;
|
xmlNodePtr children = NULL;
|
||||||
xmlNodePtr node = MY_NODE;
|
xmlNodePtr node = internal->node;
|
||||||
|
|
||||||
if ((node == NULL) || (node->children == NULL))
|
if ((node == NULL) || (node->children == NULL))
|
||||||
{
|
{
|
||||||
|
@ -938,7 +923,7 @@ execute_xpath(NSXMLNode *xmlNode, NSString *xpath_exp, NSString *nmspaces)
|
||||||
{
|
{
|
||||||
if (GS_EXISTS_INTERNAL)
|
if (GS_EXISTS_INTERNAL)
|
||||||
{
|
{
|
||||||
xmlNodePtr node = MY_NODE;
|
xmlNodePtr node = internal->node;
|
||||||
NSArray *subNodes = [internal->subNodes copy];
|
NSArray *subNodes = [internal->subNodes copy];
|
||||||
NSEnumerator *enumerator = [subNodes objectEnumerator];
|
NSEnumerator *enumerator = [subNodes objectEnumerator];
|
||||||
NSXMLNode *subNode;
|
NSXMLNode *subNode;
|
||||||
|
@ -968,7 +953,7 @@ execute_xpath(NSXMLNode *xmlNode, NSString *xpath_exp, NSString *nmspaces)
|
||||||
|
|
||||||
- (void) detach
|
- (void) detach
|
||||||
{
|
{
|
||||||
xmlNodePtr node = MY_NODE;
|
xmlNodePtr node = internal->node;
|
||||||
|
|
||||||
if (node)
|
if (node)
|
||||||
{
|
{
|
||||||
|
@ -992,7 +977,7 @@ execute_xpath(NSXMLNode *xmlNode, NSString *xpath_exp, NSString *nmspaces)
|
||||||
|
|
||||||
- (NSUInteger) index
|
- (NSUInteger) index
|
||||||
{
|
{
|
||||||
xmlNodePtr node = MY_NODE;
|
xmlNodePtr node = internal->node;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
while ((node = node->prev))
|
while ((node = node->prev))
|
||||||
|
@ -1046,7 +1031,7 @@ execute_xpath(NSXMLNode *xmlNode, NSString *xpath_exp, NSString *nmspaces)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NSXMLNamespaceKind:
|
case NSXMLNamespaceKind:
|
||||||
theSubclass = [NSXMLNamespaceNode class];
|
theSubclass = [NSXMLNamespace class];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NSXMLAttributeKind:
|
case NSXMLAttributeKind:
|
||||||
|
@ -1145,7 +1130,7 @@ execute_xpath(NSXMLNode *xmlNode, NSString *xpath_exp, NSString *nmspaces)
|
||||||
NSLog(@"s sV '%@' oV '%@', other sV '%@' oV '%@'", [self stringValue], [self objectValue],
|
NSLog(@"s sV '%@' oV '%@', other sV '%@' oV '%@'", [self stringValue], [self objectValue],
|
||||||
[other stringValue], [other objectValue]);
|
[other stringValue], [other objectValue]);
|
||||||
*/
|
*/
|
||||||
return isEqualTree(MY_NODE, (xmlNodePtr)[other _node]);
|
return isEqualTree(internal->node, (xmlNodePtr)[other _node]);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSXMLNodeKind) kind
|
- (NSXMLNodeKind) kind
|
||||||
|
@ -1158,12 +1143,12 @@ execute_xpath(NSXMLNode *xmlNode, NSString *xpath_exp, NSString *nmspaces)
|
||||||
NSUInteger level = 0;
|
NSUInteger level = 0;
|
||||||
xmlNodePtr tmp;
|
xmlNodePtr tmp;
|
||||||
|
|
||||||
if (!MY_NODE)
|
if (!internal->node)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp = MY_NODE->parent;
|
tmp = internal->node->parent;
|
||||||
while (tmp != NULL)
|
while (tmp != NULL)
|
||||||
{
|
{
|
||||||
level++;
|
level++;
|
||||||
|
@ -1183,7 +1168,7 @@ execute_xpath(NSXMLNode *xmlNode, NSString *xpath_exp, NSString *nmspaces)
|
||||||
{
|
{
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
return StringFromXMLStringPtr(MY_NODE->name);
|
return StringFromXMLStringPtr(internal->node->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSXMLNode*) _nodeFollowingInNaturalDirection: (BOOL)forward
|
- (NSXMLNode*) _nodeFollowingInNaturalDirection: (BOOL)forward
|
||||||
|
@ -1242,7 +1227,7 @@ execute_xpath(NSXMLNode *xmlNode, NSString *xpath_exp, NSString *nmspaces)
|
||||||
|
|
||||||
- (NSXMLNode*) nextSibling
|
- (NSXMLNode*) nextSibling
|
||||||
{
|
{
|
||||||
return [NSXMLNode _objectForNode: MY_NODE->next];
|
return [NSXMLNode _objectForNode: internal->node->next];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id) objectValue
|
- (id) objectValue
|
||||||
|
@ -1252,7 +1237,7 @@ execute_xpath(NSXMLNode *xmlNode, NSString *xpath_exp, NSString *nmspaces)
|
||||||
|
|
||||||
- (NSXMLNode*) parent
|
- (NSXMLNode*) parent
|
||||||
{
|
{
|
||||||
return [NSXMLNode _objectForNode: MY_NODE->parent];
|
return [NSXMLNode _objectForNode: internal->node->parent];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString*) prefix
|
- (NSString*) prefix
|
||||||
|
@ -1267,18 +1252,18 @@ execute_xpath(NSXMLNode *xmlNode, NSString *xpath_exp, NSString *nmspaces)
|
||||||
|
|
||||||
- (NSXMLNode*) previousSibling
|
- (NSXMLNode*) previousSibling
|
||||||
{
|
{
|
||||||
return [NSXMLNode _objectForNode: MY_NODE->prev];
|
return [NSXMLNode _objectForNode: internal->node->prev];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSXMLDocument*) rootDocument
|
- (NSXMLDocument*) rootDocument
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
(NSXMLDocument *)[NSXMLNode _objectForNode: (xmlNodePtr)(MY_NODE->doc)];
|
(NSXMLDocument *)[NSXMLNode _objectForNode: (xmlNodePtr)(internal->node->doc)];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString*) stringValue
|
- (NSString*) stringValue
|
||||||
{
|
{
|
||||||
xmlNodePtr node = MY_NODE;
|
xmlNodePtr node = internal->node;
|
||||||
xmlChar *content = xmlNodeGetContent(node);
|
xmlChar *content = xmlNodeGetContent(node);
|
||||||
NSString *result = nil;
|
NSString *result = nil;
|
||||||
|
|
||||||
|
@ -1321,7 +1306,7 @@ execute_xpath(NSXMLNode *xmlNode, NSString *xpath_exp, NSString *nmspaces)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
xmlNodeSetName(MY_NODE, XMLSTRING(name));
|
xmlNodeSetName(internal->node, XMLSTRING(name));
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setStringValue: (NSString*)string
|
- (void) setStringValue: (NSString*)string
|
||||||
|
@ -1331,7 +1316,7 @@ execute_xpath(NSXMLNode *xmlNode, NSString *xpath_exp, NSString *nmspaces)
|
||||||
|
|
||||||
- (void) setStringValue: (NSString*)string resolvingEntities: (BOOL)resolve
|
- (void) setStringValue: (NSString*)string resolvingEntities: (BOOL)resolve
|
||||||
{
|
{
|
||||||
xmlNodePtr node = MY_NODE;
|
xmlNodePtr node = internal->node;
|
||||||
|
|
||||||
if (resolve == NO)
|
if (resolve == NO)
|
||||||
{
|
{
|
||||||
|
@ -1355,7 +1340,7 @@ execute_xpath(NSXMLNode *xmlNode, NSString *xpath_exp, NSString *nmspaces)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ASSIGNCOPY(internal->URI, URI);
|
ASSIGNCOPY(internal->URI, URI);
|
||||||
//xmlNodeSetBase(MY_NODE, XMLSTRING(URI));
|
//xmlNodeSetBase(internal->node, XMLSTRING(URI));
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString*) URI
|
- (NSString*) URI
|
||||||
|
@ -1365,7 +1350,7 @@ execute_xpath(NSXMLNode *xmlNode, NSString *xpath_exp, NSString *nmspaces)
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
return internal->URI;
|
return internal->URI;
|
||||||
//return StringFromXMLStringPtr(xmlNodeGetBase(NULL, MY_NODE));
|
//return StringFromXMLStringPtr(xmlNodeGetBase(NULL, internal->node));
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString*) XMLString
|
- (NSString*) XMLString
|
||||||
|
@ -1399,7 +1384,7 @@ execute_xpath(NSXMLNode *xmlNode, NSString *xpath_exp, NSString *nmspaces)
|
||||||
|
|
||||||
- (NSString*) XPath
|
- (NSString*) XPath
|
||||||
{
|
{
|
||||||
xmlNodePtr node = MY_NODE;
|
xmlNodePtr node = internal->node;
|
||||||
return StringFromXMLStringPtr(xmlGetNodePath(node));
|
return StringFromXMLStringPtr(xmlGetNodePath(node));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -81,29 +81,12 @@ StringFromXMLString(const unsigned char *bytes, unsigned length)
|
||||||
return AUTORELEASE(str);
|
return AUTORELEASE(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MY_DOC ((xmlDoc *)internal->node)
|
|
||||||
#define MY_NODE ((xmlNode *)internal->node)
|
|
||||||
#define MY_ATTR ((xmlAttr *)internal->node)
|
|
||||||
#define MY_ELEM ((xmlElement *)internal->node)
|
|
||||||
#define MY_DTD ((xmlDtd *)internal->node)
|
|
||||||
|
|
||||||
/* Instance variables for NSXMLNode. This macro needs to be defined before
|
/* Instance variables for NSXMLNode. This macro needs to be defined before
|
||||||
* the NSXMLNode.h header is imported and before GSInternal.h is imported.
|
* the NSXMLNode.h header is imported and before GSInternal.h is imported.
|
||||||
*
|
|
||||||
* Description of internal ivars:
|
|
||||||
* - `children': The primary storage for the descendant nodes. We use an NSArray
|
|
||||||
* here until somebody finds out it's not fast enough.
|
|
||||||
* - `childCount': For efficiency, we cache the count. This means we need to
|
|
||||||
* update it whenever the children change.
|
|
||||||
* - `previousSibling', `nextSibling': Tree walking is a common operation for
|
|
||||||
* XML. [parent->children objectAtIndex: index + 1] would be a
|
|
||||||
* straightforward way to obtain the next sibling of the node, but it hurts
|
|
||||||
* performance quite a bit. So we cache the siblings and update them when the
|
|
||||||
* nodes are changed.
|
|
||||||
*/
|
*/
|
||||||
#define GS_NSXMLNode_IVARS \
|
#define GS_NSXMLNode_IVARS \
|
||||||
NSUInteger kind; \
|
NSUInteger kind; \
|
||||||
void *node; \
|
GS_XMLNODETYPE *node; \
|
||||||
NSUInteger options; \
|
NSUInteger options; \
|
||||||
id objectValue; \
|
id objectValue; \
|
||||||
NSString *URI; \
|
NSString *URI; \
|
||||||
|
@ -163,6 +146,14 @@ StringFromXMLString(const unsigned char *bytes, unsigned length)
|
||||||
*/
|
*/
|
||||||
#define GS_NSXMLElement_IVARS SUPERIVARS(GS_NSXMLNode_IVARS)
|
#define GS_NSXMLElement_IVARS SUPERIVARS(GS_NSXMLNode_IVARS)
|
||||||
|
|
||||||
|
/* Instance variables for NSXMLNamespace with/without the instance
|
||||||
|
* variable 'inherited' from NSXMLNode.
|
||||||
|
* This macro needs to be defined before the NSXMLNamespace interface
|
||||||
|
* is declared and before GSInternal.h is imported.
|
||||||
|
*/
|
||||||
|
#define GS_NSXMLNamespace_IVARS SUPERIVARS(GS_NSXMLNode_IVARS)
|
||||||
|
|
||||||
|
|
||||||
#import "Foundation/NSArray.h"
|
#import "Foundation/NSArray.h"
|
||||||
#import "Foundation/NSData.h"
|
#import "Foundation/NSData.h"
|
||||||
#import "Foundation/NSDebug.h"
|
#import "Foundation/NSDebug.h"
|
||||||
|
@ -208,9 +199,9 @@ StringFromXMLString(const unsigned char *bytes, unsigned length)
|
||||||
- (void *) _node;
|
- (void *) _node;
|
||||||
- (void) _setNode: (void *)_anode;
|
- (void) _setNode: (void *)_anode;
|
||||||
+ (NSXMLNode *) _objectForNode: (xmlNodePtr)node;
|
+ (NSXMLNode *) _objectForNode: (xmlNodePtr)node;
|
||||||
- (void) _addSubNode:(NSXMLNode *)subNode;
|
- (void) _addSubNode: (NSXMLNode *)subNode;
|
||||||
- (void) _removeSubNode:(NSXMLNode *)subNode;
|
- (void) _removeSubNode: (NSXMLNode *)subNode;
|
||||||
- (id) _initWithNode:(xmlNodePtr)node kind:(NSXMLNodeKind)kind;
|
- (id) _initWithNode: (xmlNodePtr)node kind: (NSXMLNodeKind)kind;
|
||||||
- (xmlNodePtr) _childNodeAtIndex: (NSUInteger)index;
|
- (xmlNodePtr) _childNodeAtIndex: (NSUInteger)index;
|
||||||
- (void) _insertChild: (NSXMLNode*)child atIndex: (NSUInteger)index;
|
- (void) _insertChild: (NSXMLNode*)child atIndex: (NSUInteger)index;
|
||||||
- (void) _invalidate;
|
- (void) _invalidate;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue