2011-02-10 168 views
1

我需要解析此XML文件需要幫助解析XML字符串

<?xml version="1.0" encoding="UTF-8"?> 
<imageset> 
<category> 
<image>SQUIRREL</image> 
<image>FOX</image> 
<image>TIGER</image>  
<image>LION</image> 
</category> 
</imageset> 

我用這個代碼來解析這一點。

- (void)viewDidLoad { 
    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:[NSData dataWithContentsOfFile:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Config.xml"]]]; 
    [super viewDidLoad]; 
    [parser setDelegate:self]; 
    [parser parse]; 
    NSLog(@"test.......... %@",test); 
    } 
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{    
    if ([elementName isEqualToString:@"image"]) { 
     test = [[NSMutableArray alloc]init]; 
     addelements = TRUE; 
    } 
} 
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{  
    if ([elementName isEqualToString:@"image"]) { 
     addelements = FALSE; 
    } 
} 
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 
     [test addObject:string]; 
} 

但它只添加最後一個對象,在控制檯中顯示如下。

test.......... (
    LION, 
    "\n\n", 
    "\n" 
) 

我需要在XML文件中添加手段所有圖像名稱{松鼠,狐狸,老虎,獅子}

我如何做,任何一個可以請幫助我。

謝謝你提前。

回答

3

你的問題是這樣的方法:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{    
    if ([elementName isEqualToString:@"image"]) { 
     test = [[NSMutableArray alloc]init]; 
     addelements = TRUE; 
    } 
} 

每次image標籤開始,您覆蓋與NSMutableArray中的一個新實例(漏水,以前的對象)的test變量。您需要將其更改爲如下所示:

 if (!test) test = [[NSMutableArray alloc]init]; 

即:如果已經沒有舊數組,則只分配一個新數組。

+0

謝謝你黑暗的灰塵,我有一個小小的懷疑,有我需要添加這個圖像的圖像名稱查看什麼是它的擴展,我的意思是我有圖像名爲SQUIRREL.jpg添加資源,我怎麼能得到它和在imageview中顯示它 – MaheshBabu 2011-02-10 07:08:11

2
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ 
    [mutableString release]; 
    mutableString = [[NSMutableString alloc] init];   
    if ([elementName isEqualToString:@"image"]) { 
     if(!test ) test = [[NSMutableArray alloc] initWithCapacity: 10]; 
    } 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ 
    if ([elementName isEqualToString:@"image"]) 
     [test addObject: mutableString]; 
} 

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

其中測試和mutableString是在您的視圖控制器的頭部聲明

注意高德:這是非常簡化的版本。

+0

如果我用最後一個元素加了3次 – MaheshBabu 2011-02-10 07:35:18

+0

也許我沒有測試過這個。我剛剛展示了使用解析器的概念。 – Max 2011-02-10 07:40:01

1
@Mahesh Babu yes you can also add the image by giving the name only as for example......  

[UIImage imageNamed:@"SQUIRREL.jpg"];