2011年3月26日 星期六

利用NSXMLParser parse梁朝偉和劉德華

xml檔範例:



<?xml version="1.0" encoding="UTF-8"?>
    <永遠的偶像>
        <名字 name="梁朝偉">
            <音樂>為情所困</音樂>
            <movie>俠骨仁心</movie>
        </名字>
        <名字 name="劉德華">
            <音樂>來生緣</音樂>
            <movie>孤男寡女</movie>
        </名字>
    </永遠的偶像>
</xml>




利用xml檔案初始NSXMLParser物件
NSData *data = [NSData dataWithContentsOfFile:path];
xmlParser = [[NSXMLParser alloc] initWithData:data];


設定delegate,如此才能於NSXMLParserDelegate的method被呼叫時做處理
[xmlParser setDelegate:self];


 呼叫NSXMLParser物件的parse method開始進行parse
 parse method is a block call,做完才return
[xmlParser parse];
[xmlParser release];


以下三個method為我們最常使用的NSXMLParserDelegate method


1. 於遇到XML tag開頭時被呼叫,可取得tag的名稱以及tag裡的attribute



-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    NSLog(@"didStartElement");
    NSLog(@"elementName %@", elementName);
    for(id key in attributeDict)
    {
        NSLog(@"attribute %@", [attributeDict objectForKey:key]);
    }
}



2. 找到XML tag所包含的內容
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    NSLog(@"foundCharacters %@", string);
}



3. 於遇到XML tag結尾時被呼叫


- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    NSLog(@"didEndElement");
    NSLog(@"elementName %@", elementName);    
}

測試輸出:
2011-03-26 16:04:46.172 XmlParse[12296:207] didStartElement
2011-03-26 16:04:46.175 XmlParse[12296:207] elementName 永遠的偶像
2011-03-26 16:04:46.177 XmlParse[12296:207] foundCharacters 
        
2011-03-26 16:04:46.178 XmlParse[12296:207] didStartElement
2011-03-26 16:04:46.179 XmlParse[12296:207] elementName 名字
2011-03-26 16:04:46.179 XmlParse[12296:207] attribute 梁朝偉
2011-03-26 16:04:46.180 XmlParse[12296:207] foundCharacters 
            
2011-03-26 16:04:46.181 XmlParse[12296:207] didStartElement
2011-03-26 16:04:46.181 XmlParse[12296:207] elementName 音樂
2011-03-26 16:04:46.182 XmlParse[12296:207] foundCharacters 為情所困
2011-03-26 16:04:46.183 XmlParse[12296:207] didEndElement
2011-03-26 16:04:46.184 XmlParse[12296:207] elementName 音樂
2011-03-26 16:04:46.185 XmlParse[12296:207] foundCharacters 
            
2011-03-26 16:04:46.185 XmlParse[12296:207] didStartElement
2011-03-26 16:04:46.186 XmlParse[12296:207] elementName movie
2011-03-26 16:04:46.187 XmlParse[12296:207] foundCharacters 俠骨仁心
2011-03-26 16:04:46.188 XmlParse[12296:207] didEndElement
2011-03-26 16:04:46.189 XmlParse[12296:207] elementName movie
2011-03-26 16:04:46.190 XmlParse[12296:207] foundCharacters 
        
2011-03-26 16:04:46.191 XmlParse[12296:207] didEndElement
2011-03-26 16:04:46.192 XmlParse[12296:207] elementName 名字
2011-03-26 16:04:46.193 XmlParse[12296:207] foundCharacters 
        
2011-03-26 16:04:46.194 XmlParse[12296:207] didStartElement
2011-03-26 16:04:46.195 XmlParse[12296:207] elementName 名字
2011-03-26 16:04:46.196 XmlParse[12296:207] attribute 劉德華
2011-03-26 16:04:46.196 XmlParse[12296:207] foundCharacters 
            
2011-03-26 16:04:46.197 XmlParse[12296:207] didStartElement
2011-03-26 16:04:46.198 XmlParse[12296:207] elementName 音樂
2011-03-26 16:04:46.198 XmlParse[12296:207] foundCharacters 來生緣
2011-03-26 16:04:46.199 XmlParse[12296:207] didEndElement
2011-03-26 16:04:46.200 XmlParse[12296:207] elementName 音樂
2011-03-26 16:04:46.201 XmlParse[12296:207] foundCharacters 
            
2011-03-26 16:04:46.202 XmlParse[12296:207] didStartElement
2011-03-26 16:04:46.202 XmlParse[12296:207] elementName movie
2011-03-26 16:04:46.203 XmlParse[12296:207] foundCharacters 孤男寡女
2011-03-26 16:04:46.204 XmlParse[12296:207] didEndElement
2011-03-26 16:04:46.204 XmlParse[12296:207] elementName movie
2011-03-26 16:04:46.206 XmlParse[12296:207] foundCharacters 
        
2011-03-26 16:04:46.206 XmlParse[12296:207] didEndElement
2011-03-26 16:04:46.207 XmlParse[12296:207] elementName 名字
2011-03-26 16:04:46.208 XmlParse[12296:207] foundCharacters 
    
2011-03-26 16:04:46.210 XmlParse[12296:207] didEndElement
2011-03-26 16:04:46.212 XmlParse[12296:207] elementName 永遠的偶像






1 則留言: