2012-12-30 191 views
0

我想從可可中的xml解析以下信息。使用NSXML解析器解析可可

<level> 
    <entity> 
    <name>red</name> 
    <id>0</id> 
    <body>false</body> 
    <x>0.0</x> 
    <y>0.0</y> 
    <rotation>0.0</rotation> 
    </entity> 

這是我到目前爲止從Apple按照nsxml分析器指南。

NSString* currentElement; 


- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ 

currentElement = elementName; 

} 



- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 

if([currentElement isEqualToString:@"name"]){ 
    NSLog(@"Name found: %@", string); 
} 

} 

在我發現的字符方法中,它記錄了語句,但唯一返回的是「發現名稱:」,其餘爲空。

我是否正確地做到這一點,以獲得我的xml中的以下標籤?我想提取每個標籤。

例如:

NSString* name = THE_NAME; 
int x = [THE_X_VALUE, intValue]; 

任何人都可以幫我嗎?

+0

「唯一返回的是」找到的字符:「」 - 你的意思是NSLog只打印「名稱找到:」? – 2012-12-30 21:43:50

+0

對不起。是。它只打印「找到的名稱:」 –

+0

你知道該方法可能不包含所有的字符,可能會被調用多次,所以你真的想積累這些字符在'NSMutableString'? – 2012-12-30 22:30:48

回答

0

NSXMLParser是那些在紙上聽起來不錯的類之一,但是當你真正開始使用它的時候會讓你瘋狂。如果你真的想繼續這個無憂無慮的路徑,實現解析器:didStartElement:然後祈禱解析器:foundCharacters:交付貨物。 根據我的經驗,NSXMLParser就像一個大蹣跚學步的孩子,他可以搗毀難題,然後逐個將您的作品遞給您。起初看起來很棒:「哦,看,我有一塊,還有一塊!還有一塊!」但很快你會發現自己迷惑不解:「哦,看,我有5.0!現在,是旋轉還是Y座標?」誰知道?不是NSXMLParser,這是肯定的。

至於最後一行代碼:提取字符串的數值,NSDecimalNumber非常方便。

if([currentElement isEqualToString:@"x"]){ 
    NSDecimalNumber *dec = [NSDecimalNumber numberWithString:string]; 
    CGFloat x = dec.floatValue; 
}