2011-10-10 38 views
4

所以我知道如何解析一些XML結構,但我目前正試圖解析這個特定的xml結構,這與我習慣的有點不同。如何爲ios開發解析xml

通常我會解析像

<xml> 
    <data> 
    <name>Forrest</name> 
    <age>25</name> 
    <username>forrestgrant</username> 
    </data> 
</xml> 

但現在我有像這樣一些XML工作..

<xml> 
    <data name="Forrest" age="25" username="forrestgrant" /> 
    <other value="6" /> 
</xml> 

我該如何訪問這些變量的時候,他們正在構建這樣? 這就是我通常會接近這個任務的過程,這個任務是搜索標題標籤並從每個標籤獲取數據的。但是我現在試圖弄清楚如何解析這種其他樣式的xml。

- (void)startTheParsingProcess:(NSData *)parserData 
{ 
    [myDataArray release]; // clears array for next time it is used. 
    myDataArray = [[NSMutableArray alloc] init]; //initalizes the array 

    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:parserData]; //incoming parserDatapassed to NSXMLParser delegate which starts parsing process 

    [parser setDelegate:self]; 
    [parser parse]; //Starts the event-driven parsing operation. 
    [parser release]; 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    if ([elementName isEqual:@"item"]) { 
     // NSLog(@"Found title!"); 
     itemString = [[NSMutableString alloc] init]; 
    } 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    [itemString appendString:string]; 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    if ([elementName isEqual:@"item"]) { 
     //NSLog(@"ended title: %@", itemString); 
     [myDataArray addObject:itemString]; //this is where i pass the values over to my array. 

     [itemString release]; 
     itemString = nil; 
    } 
} 

- (void)parserDidEndDocument:(NSXMLParser *)parser 
{ 
    // Passes myDataArray to the method that will sort and display the array into a uitableview. 
    [self startSortingTheArray:myDataArray]; 
} 

任何幫助將不勝感激..

回答

3

上面的xml數據提供了xml元素上的屬性數據。

此回調方法可讓您訪問屬性作爲鍵值(attributeDict)的字典。

(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI 
    qualifiedName:(NSString *)qualifiedName 
    attributes:(NSDictionary *)attributeDict 

的NSLog該方法中的字典出去看值:

NSLog(@"attributes: %@", attributeDict); 
+0

沒關係..酷我得到的..我可能只是去NSDictionaries讀了現在..還沒有真正使用他們在到目前爲止。 –

+0

字典只是一個集合鍵和值。您應該爲每個屬性設置一個密鑰,併爲該密鑰的每個值設置一個值。玩得開心:) – bryanmac

+0

是的我有他們的一般想法,但需要做一些體面的閱讀他們之前,我嘗試任何瘋狂的! :)歡呼的幫助!非常感激 –

1

在你didStartItem:法,attributes字典將包含所有的XML屬性值。