ios-使用NSXMLParser解析XML文件

来源:互联网 发布:用软件装系统 编辑:程序博客网 时间:2024/05/22 08:29

NSXML是ios SDK自带的,也是苹果默认的解析框架,它采用SAX模式解析,是SAX解析模式的代表。NSXML框架的核心是NSXMLParser和它的委托协议NSXMLParserDelegate。

1、例子Notes.xml:

<?xml version="1.0" encoding="UTF-8"?><Notes>    <Note id="1">        <CDate>2012-12-21</CDate>        <Content>iosBOOK_1</Content>        <UserID>tony</UserID>    </Note>    <Note id="2">        <CDate>2012-12-22</CDate>        <Content>iosBOOK_2</Content>        <UserID>tony</UserID>    </Note>    <Note id="3">        <CDate>2012-12-23</CDate>        <Content>iosBOOK_3</Content>        <UserID>tony</UserID>    </Note>    <Note id="4">        <CDate>2012-12-24</CDate>        <Content>iosBOOK_4</Content>        <UserID>tony</UserID>    </Note>    <Note id="5">        <CDate>2012-12-25</CDate>        <Content>iosBOOK_5</Content>        <UserID>tony</UserID>    </Note>    <Note id="6">        <CDate>2012-12-26</CDate>        <Content>iosBOOK_6</Content>        <UserID>tony</UserID>    </Note></Notes>

2、编写一个专门解析XML文件的类(NotesXMLParser):

- (void)start{    // 在整个程序包里面搜索Notes.xml    NSString *path = [[NSBundle mainBundle] pathForResource:@"Notes" ofType:@"xml"];    NSURL *url = [NSURL fileURLWithPath:path];        NSXMLParser *m_Parser = [[[NSXMLParser alloc] initWithContentsOfURL:url] autorelease];    m_Parser.delegate = self;    [m_Parser parse];}// 解析文档开始- (void)parserDidStartDocument:(NSXMLParser *)parser{    _notes = [[NSMutableArray alloc] init];}// 解析文档结束- (void)parserDidEndDocument:(NSXMLParser *)parser{    // 使用KVO模式,通知中心机制    [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadXMLData" object:_notes userInfo:nil];        [_notes removeAllObjects];    _notes = nil;}// 解析开始标签- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{    _curTagName = elementName;    if ([_curTagName isEqualToString:@"Note"])    {        NSString *_id = [attributeDict objectForKey:@"id"];        NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];        [dict setObject:_id forKey:@"id"];        [_notes addObject:dict];        [dict release];    }}// 解析结束标签- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{    _curTagName = nil;}// 解析字符串- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{    string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];    if ([string isEqualToString:@""])        return;        NSMutableDictionary *dict = [_notes lastObject];    if ([_curTagName isEqualToString:@"CDate" ] && dict)    {        [dict setObject:string forKey:@"CDate"];    }    else if ([_curTagName isEqualToString:@"Content"] && dict)    {        [dict setObject:string forKey:@"Content"];    }    else if ([_curTagName isEqualToString:@"UserID"])    {        [dict setObject:string forKey:@"UserID"];    }}#if M_COMPILE == DEBUG- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{    NSLog(@"解析错误:%@",parseError);}#endif

3、实际使用:

<pre name="code" class="cpp">- (void)initObserver{    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getXMLData:) name:@"reloadXMLData" object:nil];        // 开始解析xml文件    NotesXMLParser *parser = [[NotesXMLParser alloc] init];    [parser start];    [parser release];}- (void)getXMLData:(NSNotification *)notification{    NSMutableArray *xmlData = [notification object];    NSLog(@"xmlData:%@",xmlData);}

至此,NSXMLParser的介绍已经完毕,效果如下:
2014-08-30 11:14:27.671 test71[6436:60b] xmlData:(        {        CDate = "2012-12-21";        Content = "iosBOOK_1";        UserID = tony;        id = 1;    },        {        CDate = "2012-12-22";        Content = "iosBOOK_2";        UserID = tony;        id = 2;    },        {        CDate = "2012-12-23";        Content = "iosBOOK_3";        UserID = tony;        id = 3;    },        {        CDate = "2012-12-24";        Content = "iosBOOK_4";        UserID = tony;        id = 4;    },        {        CDate = "2012-12-25";        Content = "iosBOOK_5";        UserID = tony;        id = 5;    },        {        CDate = "2012-12-26";        Content = "iosBOOK_6";        UserID = tony;        id = 6;    })


0 0