2010-10-19 5 views
1

J'ai un petit problème que je n'arrive pas à résoudre. J'ai une page XML avec le contenu suivant:NSString avec XML à NSArray avec NSDictionary

<?xml version="1.0" encoding="utf-8"?> 
<ArrayOfCategory xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://api.tradera.com"> 
    <Category Id="1612" Name="Category 1"> 
    <Category Id="161213" Name="Category 1 subcat 1"> 
     <Category Id="340761" Name="Category 1, subcat 1, subcat 1" /> 
     <Category Id="340761" Name="Category 1, subcat 1, subcat 2" /> 
     <Category Id="340761" Name="Category 1, subcat 1, subcat 3" /> 
     <Category Id="340761" Name="Category 1, subcat 1, subcat 4" /> 
     <Category Id="340761" Name="Category 1, subcat 1, subcat 5" /> 
    </Category> 
    <Category Id="161213" Name="Category 1 subcat 2"></category> 
    <Category Id="161213" Name="Category 1 subcat 3"> 
     <Category Id="340761" Name="Category 1, subcat 3, subcat 1" /> 
    </category> 
    </Category> 
    <Category Id="1612" Name="Category 1"> 
    [...] 
    </category> 
</ArrayOfCategory> 

Ce que je veux faire est de convertir en un tableau avec des dictionnaires. Donc, ce devrait être un tableau avec la clé 0 = dictatoriale avec les éléments Id, Name et subcats. Les sous-chats devraient être un tableau avec les mêmes clés.

Jusqu'à présent, j'ai le code suivant:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self startParsing]; 
} 

- (void)startParsing { 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"categories" ofType:@"xml"]; 

    NSData *xmlData = [[NSData alloc] initWithContentsOfFile:path]; 
    NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:xmlData] autorelease]; 
    [parser setDelegate:self]; 
    [parser parse]; 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { 
    NSLog(@"Started %@, attribute: %@", elementName, attributeDict); 
} 

Mais je ne peux pas sembler comprendre comment créer ce tableau en utilisant NSXMLParser, des suggestions?

Cordialement, Paul Peelen

Répondre

2

Comme il est indiqué sur le chat, vous devez suivre quel niveau vous êtes à l'intérieur de la section

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { 
    NSLog(@"Started %@, attribute: %@", elementName, attributeDict); 
} 

. Peut-être en utilisant un ivar global à l'intérieur?

Questions connexes