2012-02-26 66 views
0

首先,請接受我對文本的道歉。我是法國人,在我的語法中有一些錯誤是不會「奇怪的」。解析一個Xml文檔並使用一些Xml的值創建一個Array

請記住,我是客觀C世界和編程的「新手」。

因此,爲了解釋我實際存在的問題,我需要解析一個xml,從中獲取一些信息(將它們放在數組或字典中)並將它們顯示在視圖上。

這是種的XML我不得不解析:XML

因此,大家可以看到,你必須在這個XML幾個「echeances」標籤。在他們中你有以前的十個日期,在這些日期中,你有不同的價值觀。

我必須在最後展示什麼?每個「echeance」標籤的最近日期(「列表」中的第一個)的標籤「Settle」和「Variation」。 (我還需要皮卡屬性「NOM =」每個「echeance」。

其實我已經學會了使用「MVC」編碼,和我有一些麻煩的「模型」的一部分。

我使用的Xcode 4.2和使用(我嘗試...)使用ARC模式

因此,讓我明白我已經暫時

完成的.H:

#import <Foundation/Foundation.h> 
#import "Echeances.h" 

@interface XMLToObjectParser : NSObject <NSXMLParserDelegate> 

{ 
    NSMutableString *settle; 
    NSMutableString *settle2; 
    NSMutableString *change; 
    NSMutableArray *lstEcheance; 
    NSString *currentNodeName; 
    NSMutableString *currentNodeContent; 
    NSMutableDictionary *dico; 
    NSMutableArray *settleArray; 
    NSMutableArray *expiryArray; 
    NSMutableArray *changeArray; 
    NSString *expiryName; 
    int compteur; 
    Echeance *ech; 
} 

@property (nonatomic, strong) NSMutableArray *expiryArray; 
@property (nonatomic, strong) NSMutableArray *settleArray; 
@property (nonatomic, strong) NSMutableArray *changeArray; 
@property (nonatomic, strong) NSMutableString *currentNodeContent; 
@property (nonatomic, strong) Echeance *ech; 
@property (nonatomic, strong) NSString *expiryName; 
@property (nonatomic, strong) NSMutableString *settle; 
@property (nonatomic, strong) NSMutableString *settle2; 
@property (nonatomic, strong) NSMutableString *change; 





- (NSMutableArray *)expiry; 

- (id)parseXMLAtURL:(NSURL *)url toObject:(NSString *)echeance parseError:(NSError **)error; 


@end 

.m:

#import "XMLToObjectParser.h" 


@implementation XMLToObjectParser 

@synthesize expiryArray; 
@synthesize settleArray; 
@synthesize changeArray; 
@synthesize currentNodeContent; 
@synthesize ech; 
@synthesize expiryName; 
@synthesize settle; 
@synthesize settle2; 
@synthesize change; 


- (NSMutableArray *)expiry 

{ 
    return expiryArray; 

} 

- (NSMutableDictionary *)dico 

{ 
    return dico; 
} 

- (id)parseXMLAtURL:(NSURL *)url toObject:(NSString *)aExpiryName parseError:(NSError **)error 
{ 

    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url]; 

    [parser setDelegate:self]; 
    [parser parse]; 


    if([parser parserError] && error) 
    { 
     *error = [parser parserError]; 
    } 

    return self; 
} 

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


{ 

    if([elementName isEqualToString:@"echeance"]) 

    { 

     ech.nomEcheance = [attributeDict objectForKey:@"nom"]; 

     [expiryArray addObject:ech.nomEcheance]; 

     NSLog(@"%@", expiryArray); 

    } 


} 

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

{ 

    if([elementName isEqualToString:@"settle"] || [elementName isEqualToString:@"variation"]) 

    { 

     for(int i = 0; i < [expiryArray count]; i++) 
     { 
      [settleArray addObject:currentNodeContent]; 
      NSLog(@"settle Array: %@",[settleArray lastObject]); 
     } 


    } 


} 


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

{ 

    [currentNodeContent setString:string]; 

} 



@end 

而且你可以賭它......它不工作。

我真正想要做的事情是做一個與「echeance」標記的屬性「nom =」作爲我的詞典的KEY和每個關鍵字與正確的解決和變化相關的字典作爲頂部的解釋我的話題。

要完成,我想感謝所有誰一定會盡力幫助我:)

感謝您閱讀的人。

羅曼

回答

0

NSXMLParserDelegate的原理是didStartElement(),foundCharacters()和didEndElement()的組合:

Echaence-對象具有:

  • NOM
  • settleArray如一個可變陣列

parseXMLAtUrl :

  • 創建字典對象

didStartElement:

  • 實測值元素 'echeance'=>創建新對象Echeance並將其存儲在字典。保留指向對象的指針,以便在私有屬性中進一步操作
  • 找到的元素 '落戶'=>存儲標誌,我們在結算模式

foundCharacters:

  • 如果settle_mode =>添加字符串當前Echeance-對象的settleArray

didEndElement:

  • 發現元素 '沉降'=> DELE特旗,我們在定居模式