【问题标题】:Objective c read xml and stock it in array目标c读取xml并将其存储在数组中
【发布时间】:2011-01-14 20:15:42
【问题描述】:

我的 xlm 阅读器有问题。我有一些货币骑手我想存入一个数组,但我的代码有问题。

这是我想阅读的提要: http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml

头文件

@class Convertisseur;


@interface Convertisseur1ViewController : 
   UIViewController <UITextFieldDelegate>{

    IBOutlet UILabel *usd;
    IBOutlet UILabel *euro;
 Convertisseur *convertisseur;


     // parser XML
    NSXMLParser *rssParser;
     // elenco degli elementi letti dal feed
    NSMutableArray *elencoFeed;

     //variabile temporanea pe ogni elemento
    NSMutableDictionary *item;

     // valori dei campi letti dal feed
    NSString *currentElement;
    NSMutableString *currentCube;

    NSArray *currency;
}


//Dichiarazion del parser
 - (void)parseXMLFileAtURL:(NSString *)URL;
@end

实现文件

#import "Convertisseur1ViewController.h"
#import "Convertisseur.h"

@implementation Convertisseur1ViewController




- (void)parseXMLFileAtURL:(NSString *)URL {
  // inizializziamo la lista degli elementi
 elencoFeed = [[NSMutableArray alloc] init];

  // dobbiamo convertire la stringa "URL" in un elemento "NSURL"
 NSURL *xmlURL = [NSURL URLWithString:URL];

  // inizializziamo il nostro parser XML
 rssParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlURL];

 [rssParser setDelegate:self];

  // settiamo alcune proprietà
 [rssParser setShouldProcessNamespaces:NO];
 [rssParser setShouldReportNamespacePrefixes:NO];
 [rssParser setShouldResolveExternalEntities:NO];

  // avviamo il parsing del feed RSS
 [rssParser parse];
}




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

 currentElement = [elementName copy];
 if ([elementName isEqualToString:@"item"]) {
   // inizializza tutti gli elementi
  item = [[NSMutableDictionary alloc] init];
  currentCube = [[NSMutableString alloc] init];
 }
}

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

 if ([elementName isEqualToString:@"Cube"]) {
  /* salva tutte le proprietà del feed letto nell'elemento "item", per
   poi inserirlo nell'array "elencoFeed" */
  [item setObject:currentCube forKey:@"Cube"];

  [elencoFeed addObject:[item copy]];
 }
}




- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{;
  // salva i caratteri per l'elemento corrente
 if ([currentElement isEqualToString:@"Cube"]){
  [currentCube appendString:string];
 }
}






- (void) parserDidEndDocument:(NSXMLParser *)parser {


 for(int i=1;i<[elencoFeed count];i++) {

  [currency setvalue:[[elencoFeed Objectatindex:i] valueforkey:@"rate"] forkey:[[elencoFeed Objectatindex:i] valueforkey:@"currency"]];
  //currency[i]= [elencoFeed Objectatindex:i] valueforkey:@"rate"] forkey:[[elencoFeed Objectatindex:i] valueforkey:@"currency"];

 }

}



 - (void)viewDidLoad {
 [super viewDidLoad];
 convertisseur = [[Convertisseur alloc] init];


  self.title = @"Convertisseur";

  NSString *path = @"http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml";
  [self parseXMLFileAtURL:path];
  euro.text =  currency.text;
 }



- (void)viewDidUnload {
  // Release any retained subviews of the main view.
  // e.g. self.myOutlet = nil;
 self.labelEuro = nil;
 self.labelDollar = nil;
 self.convertisseur = nil;

 }



- (void)dealloc {
    [super dealloc];
}

【问题讨论】:

  • 格式化代码更容易阅读问题
  • 怎么了?您能否发布您可能收到的任何错误消息?
  • 错误在这里:euro.text = currency.text;

标签: iphone objective-c xml arrays nsarray


【解决方案1】:

您可以考虑使用 TouchXML。我发现它比 NSXMLParser 更容易使用

(见http://foobarpig.com/iphone/touchxml-installation-guide.html

它将为您提供 XML 文档结构的内存表示,您必须步行才能提取所需的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 2011-02-11
    • 2015-07-09
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多