//
// CCXml.m
// CCFC
//
// Created by xichen on 11-12-19.
// Copyright 2011 ccteam. All rights reserved.
//
#import "CCXml.h"
@implementation CCXmlProperty
- (id)initWithAttr:(xmlAttrPtr)attr
{
self = [super init];
if(self)
{
_attr = attr;
}
return self;
}
- (void)dealloc
{
[super dealloc];
}
@end
@implementation CCXmlNode
+ (id)nodeWithNode:(CCXmlNode *)node
{
return [[[CCXmlNode alloc] initWithNode:node->_node] autorelease];
}
- (id)initWithNode:(xmlNodePtr)node
{
self = [super init];
if(self)
{
_node = node;
}
return self;
}
- (void)dealloc
{
[super dealloc];
}
- (int)type
{
return _node->type;
}
- (CCXmlNode *)next
{
if(_node->next == NULL)
return nil;
return [[[CCXmlNode alloc] initWithNode:_node->next] autorelease];
}
- (CCXmlNode *)prev
{
if(_node->prev == NULL)
return nil;
return [[[CCXmlNode alloc] initWithNode:_node->prev] autorelease];
}
- (CCXmlNode *)last
{
if(_node->last == NULL)
return nil;
return [[[CCXmlNode alloc] initWithNode:_node->last] autorelease];
}
- (CCXmlNode *)child
{
if(_node->children == NULL)
return nil;
return [[[CCXmlNode alloc] initWithNode:_node->children] autorelease];
}
- (CCXmlNode *)parent
{
if(_node->parent == NULL)
return nil;
return [[[CCXmlNode alloc] initWithNode:_node->parent] autorelease];
}
- (unsigned char *)name
{
return (unsigned char *)_node->name;
}
- (unsigned char *)text
{
return (unsigned char *)xmlNodeGetContent(_node);
}
- (unsigned char *)getProp:(const char *)propName
{
return (unsigned char *)xmlGetProp(self->_node, (const xmlChar *)propName);
}
- (void)setProp:(const char *)name withValue:(const char *)value
{
xmlSetProp(self->_node, BAD_CAST(name), BAD_CAST(value));
}
@end
@implementation CCXml
- (id)initWithFileFullPath:(NSString *)fileFullPath
{
self = [super init];
if(self)
{
_doc = xmlParseFile([fileFullPath UTF8String]);
if(_doc == NULL)
return nil;
_rootNode = [[CCXmlNode alloc] initWithNode:xmlDocGetRootElement(_doc)];
_firstLevelNodesArr = [NSMutableArray new];
if(_rootNode != nil)
{
xmlNodePtr curNode = _rootNode->_node->children;
while(curNode != NULL)
{
if(curNode->type == XML_ELEMENT_NODE)
{
[_firstLevelNodesArr addObject:[[[CCXmlNode alloc] initWithNode:curNode] autorelease]];
}
curNode = curNode->next;
}
}
}
return self;
}
- (void)dealloc
{
if(_doc != NULL)
xmlFreeDoc(_doc);
[_rootNode release];
[super dealloc];
}
- (CCXmlNode *)getRootNode
{
return _rootNode;
}
- (NSArray *)firstLevelNodeArr
{
return _firstLevelNodesArr;
}
- (NSArray *)getSubElementNodeArr:(CCXmlNode *)mainNode
{
NSMutableArray *arr = [NSMutableArray array];
if(mainNode != nil)
{
xmlNodePtr curNode = mainNode->_node->children;
while(curNode != NULL)
{
if(curNode->type == XML_ELEMENT_NODE)
{
[arr addObject:[[[CCXmlNode alloc] initWithNode:curNode] autorelease]];
}
curNode = curNode->next;
}
}
return arr;
}
@end
可能有更新:
googlecode链接地址:http://code.google.com/p/iphone-common-codes-ccteam/source/browse/trunk/CCFC/files/CCXml.m
github地址: https://github.com/cxsjabc/iphone-common-codes-ccteam/tree/master/CCFC/files/CCXml.m