首先,请接受我对案文的道歉。我是法国人,我的语法中有一些错误并不会“奇怪”。
请记住,我是客观C世界和编程的“新手”。
因此,为了解释我实际存在的问题,我需要解析一个xml,从中获取一些信息,(将它们放在数组或字典中)并在视图上显示它们。
这是我必须解析的那种Xml:XML
正如你所看到的,你在这个Xml中有几个“echeances”标签。在他们中你有前十个日期,在那些日期,你有不同的值。
我最后要展示什么?每个“echeance”标签的最近日期(“列表”中的第一个)的标签“Settle”和“Variation”。 (我还需要为每个“echeance”获取属性“nom =”。
实际上我已经学会了使用“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 =”作为我的词典的关键词来制作一个词典,并将每个关键词与正确的解决方案和变异相关联,作为我的主题上的解释。
要完成,我要感谢所有试图帮助我的人:)
感谢阅读。
罗曼
答案 0 :(得分:0)
NSXMLParserDelegate的原理是didStartElement(),foundCharacters()和didEndElement()的组合:
Echaence-Object有:
parseXMLAtUrl:
didStartElement:
foundCharacters:
didEndElement: