Comu Parse XML Files in Xcode

Un simplicità simplice chì hè a spine à parechje apps hè a capacità per annunzià i schedari XML. E, felice, Xcode volenu relativamente faciule per analizà un schedariu XML in Objective-C.

Un schedariu XML pò cuntene di qualcuna di dati basi nantu à a vostra app à un altru RSS per un situ web. Puderanu ancu esse una bella manera di l'aghjurnamentu di l'infurmazioni nantu à a vostra appurtazione remotamente, cusì sguardate a necessità di mandà un novu binariu à Apple per aghjustà un novu elementu à una lista.

Cumu si tratta di i schedari XML in Xcode? U prucessu cuntene i passi per inizià i variàbili per esse utilizati, principiendu u prucessu di l'analitze XML, chì alimentate chì prucessa un schedariu, l'iniziu di un elementu individuu, i caratteri (valuru) in l'elementu, a fine di un elementu individuu, è a fini di u prucessu analizatu.

In questu esempiu, analizamu un schedariu da Internet per mezu di un indirizzu web particulari ( URL ).

Avemu da principià cù a custruisce u fogliu di cache. Questu hè un esempiu di un schedariu di capu fundamentale assai per un cuntrollu di Vista Detallata cù i règimi minimi per analizà u nostru schedariu:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;

NSXMLParser * rssParu;
Articuli NSMutableArray *;
Elementu NSMutable Dictionary;
NSString * currentElement;
NSMutableString * ElementValue;
BOOL errorParsing;
}

@property (nonatomic, retain) IBOutlet DetailViewController * detailViewController;

- (void) parseXMLFileAtURL: (NSString *) URL;

A funzione parseXMLFileAtURL accumincià u prucessu per noi. Quandu finisci, l'articuli "NSMutableArray" mantene e nostre dati. U duminiu sarà di dicumenti mutabilità cù chjavi cresciati cù i nomi di campu in u schedariu XML.

Avà chì avemu criatu e variàbbili, avemu immiscu in u scontru di u prucessu in u .m file:

- (void) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ "U schedariu hè truvatu è analizatu");

}

Sta funzione cresce in u principiu di u prucessu. Ùn ci hè bisognu di nunda di sta funzione, ma se vulete fà cumparisce un schedariu quandu u schedariu vene di esse analizatu, questu hè duvere site u vostru codice.

- (void) parseXMLFileAtURL: (NSString *) URL
{

NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit / 525.27.1 (KHTML, cum'è Gecko) Version / 3.2.1 Safari / 525.27.1";
NSMutableURLRequest * request = [NSmutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[request setValue: agentString forHTTPHeaderField: @ "Agent d'usuariu"];
xmlFile = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil];


Artìculi = [[NSMutableArray alloc] init];
errorParsing = micca;

rssParser = [[NSXMLParser alloc] initWithData: xmlFile];
[rssPasura setDelegate: self];

// Quandu avete bisognu di cambià qualchì parta di queste nantu à u tipu di schedariu XML chì stanu annunziati
[rssPasura setShouldProcessNamespaces: NO];
[rssPasura setShouldReportNamespacePrefixes: NO];
[rssPasura setShouldResolveExternalEntities: NO];

[rssParser parse];

}

A questa funzione struisce à u motoru per scaricà un schedariu à un indirizzu web particular (URL) è principià u prucessu per analizà.

Avemu infurmatu à u servitore remotu chì sìammu un Safari per esempiu in Mac solu chì u servitore tene à redireccionà l' iPhone / l'iPad à una versione mobile.

L'opzioni à a fine sò specifiche à certi schedari XML. A maghjina di i schedari RSS è i schedarii generici di XML ùn deve micca bisognu à ellu.

- (void) parser: (NSXMLParser *) parser parseErrorOccurred: (NSError *) parseError {

NSString * errorString = [NSString stringWithFormat: @ "U codice di errore% i", [parseError code]];
NSLog (@ "Error parsing XML:% @", errorString);


errorParsing = SÍ;
}

Questu hè un errore simplificatu di verificatu di errore chì stabiliscerà un valori binariu si trova un errore. Pudete bisognu di qualcosa più specificu quì dettu ciò chì site. Sì avete bisognu à corruzà un codice dopu à u trattamentu in u casu di l'errore, a variable variable binariu pò esse chjamatu à quellu tempu.

- (void) parser: (NSXMLParser *) parser didStartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName attribute: (NSDictionary *) attributeDict {
currentElement = [elementName copy];
ElementValue = [[NSMutableString alloc] init];
se ([elementName isEqualToString: @ "item"]) {
item = [[NSMutableDictionary alloc] init];

}

}

A carattere di l'analitze XML cuntene tres funzioni, unu chì currigia à u principiu di un elementu individuu, questu chì curri duranti a fine di l'analizazione l'elementu è questu chì curri à a fine di l'elementu.

Per questu esempiu, analizamu un schedariu similar à i schedari RSS chì scriveranu elementi in gruppi sottu l'intrecciu di "articuli" in u schedariu XML. À l'iniziu di u trasfurmazioni, simu verificà l'elementu "elementu" è attribuisce u dizziunariu di l'articulu quan un detto novu gruppu hè detecatu. In più, avemu initializatu a nostra variable per u valore.

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

Questu hè a parti faciliata. Quandu si truvamu caratteri, aghjustà à l'altri variable "ElementValue".

- (void) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName {
se ([elementName isEqualToString: @ "item"]) {
[articles addObject: [copia d'articulu]];
} altru {
[item setObject: ElementValue forKey: elementName];
}

}

Quandu avemu fattu finutu l'ippruvuli un elementu, avemu bisognu di fà una di dui cose: (1) se l'elementu finale hè "articulu", avemu finitu u nostru gruppu, cusì avà aghjustà u nostru dicenu à a nostra varietà di "articuli ".

O (2) Se l'elementu ùn hè micca "articulu", avemu dictu u valore in u nostru dizziunariu cù una chjave chì coincide cù u nome di l'elementu. (Questu significa chì ùn hà micca bisognu di una varià ndividuale per ogni campu sanu à u schedariu XML. Pudemu prucessi un pocu più dinamica.)

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

se (errorParsing == NO)
{
NSLog (@ "Prucessu XML fattu!");
} altru {
NSLog (@ "U errore si parechji prucessu XML);
}

}

Questa hè l'ultima funzione necessaria per a nostra parsing routine. Hè solu finisce u documentu. Puderete chjudarà u codice chì vulete finisce u prucessu o qualcosa pessimu chì pudete vulerete fà in casu d'errore.

Una cosa di quelli appricazzioni forse vogliu fà quì hè di salvà a datu è / o u schedariu XML in un schedariu nantu à u dispositivu. Questu modu, se l'usu ùn hè micca cunnessu cù l'Internet a prossima volta si carghjenu l'app, ancu ponu ghjunghje à sta informazione.

Di sicuru, ùn pudemu micca scurdà a parte più impurtante: dì à l'applijazione per analise u schedariu (è dà un indirizzu web per truvà!).

Per principià u prucessu, ci hè bisognu di aghjustà sta linea di codice in u locu adattatu induve ellu vulete fà u procesatu XML:

[parseXMLFileAtURL self: @ "http://www.webaddress.com/file.xml"];