1、XML文件:LanguagesName.xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
<language>
<id>1</id>
<name>English</name>
</language>
<language>
<id>2</id>
<name>简体中文</name>
</language>
</root>
2、头文件:LangXMLParser.h
#import "LangXMLElement.h"
#import <Foundation/Foundation.h>
@interface LangXMLParser :NSObject<NSXMLParserDelegate>
- (NSMutableDictionary *)startParser;
@end
3、源文件:LangXMLParser.m
#import "LangXMLParser.h"
@implementation LangXMLParser{
NSXMLParser *parser;
NSMutableDictionary *mLangDict;
LangXMLElement *mRootElement;
LangXMLElement *mCurrentElement;
}
-(NSMutableDictionary *)startParser{
NSString *xmlFilePath = [[NSBundlemainBundle]pathForResource:@"LanguagesName"ofType:@"xml"];
NSData *data = [[NSDataalloc]initWithContentsOfFile:xmlFilePath];
parser = [[NSXMLParseralloc]initWithData:data];
parser.delegate =self;
if([parser parse]){
if(mLangDict ==nil){
mLangDict = [[NSMutableDictionaryalloc] init];
}
[mLangDictremoveAllObjects];
NSMutableArray *subs =mRootElement.subElements;
for(int i =0; i < [subs count];i++){
LangXMLElement *langElement = [subs objectAtIndex:i];
NSArray *subElements = langElement.subElements;
[mLangDictsetObject:[subElements[1]elementText] forKey:[subElements[0]elementText]];
}
}
returnmLangDict;
}
-(void)parserDidStartDocument:(NSXMLParser *)parser
{
mRootElement =nil;
mCurrentElement =nil;
mLangDict = nil;
}
-(void)parserDidEndDocument:(NSXMLParser *)parser
{
mCurrentElement =nil;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if(mRootElement ==nil){
mRootElement = [[LangXMLElementalloc]init];
mCurrentElement =mRootElement;
}else{
LangXMLElement *newElement = [[LangXMLElementalloc]init];
newElement.parent =mCurrentElement;
[mCurrentElement.subElementsaddObject:newElement];
mCurrentElement = newElement;
}
mCurrentElement.elementName = elementName;
mCurrentElement.attributes = attributeDict;
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
mCurrentElement =mCurrentElement.parent;
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if([mCurrentElement.elementTextlength] > 0){
mCurrentElement.elementText = [mCurrentElement.elementTextstringByAppendingString:string];
}else{
mCurrentElement.elementText = [NSMutableStringstringWithString:string];
}
}
@end