Nola XML fitxategiak Xcode analizatu

Aplikazio askoren bizkarrezurra den ataza sinple bat XML fitxategiak analizatzeko gaitasuna da. Zorionez, Xcode-k Objective-C-ren XML fitxategi bat analizatzeko nahiko erraza bihurtzen du.

XML fitxategi batek zure aplikazioari buruzko oinarrizko datuak eduki ditzake webgune baten RSS iturrirako . Era berean, zure aplikazioan urrunetik informazioa eguneratzeko modu bikaina ere izan daiteke. Horrela, Apple-ri bitarra berri bat bidali beharra besterik ez da zerrendan elementu berri bat gehitzeko.

Beraz, nola XML fitxategiak Xcode prozesatzen dugu? Prozesuak erabiltzen diren aldagaiak hasieratzeko urratsak ditu, XML analizatzaile prozesua hasita, prozesatu fitxategi bat prozesatzen, elementu banako baten hasiera, elementuaren barruan karaktereak (balioa) banakako elementuaren amaieran eta azterketa prozesuaren amaieran.

Adibide honetan Interneten fitxategi bat aztertuko dugu web helbide jakin bat ( URL ) pasatuz.

Goiburuko fitxategia eraikitzeko hasiko gara. Hau xehetasunen kontroladorea oso oinarrizko fitxategi baten adibidea da, gure fitxategiak parekatzeko gutxieneko eskakizunekin:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;

NSXMLParser * rssParser;
NSMutableArray * artikuluak;
NSMutableDictionary * elementua;
NSString * currentElement;
NSMutableString * ElementValue;
BOOL errorParsing;
}

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

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

ParseXMLFileAtURL funtzioak prozesua abiaraziko digu. Amaitzen denean, NSMutableArray "artikuluak" gure datuak gordeko ditu. Matrizeak hiztegi mutagarriak izango ditu XML fitxategiko eremuen izenak dituzten teklekin.

Beharrezko aldagaiak konfiguratu ondoren, mugitu egingo dugu .m fitxategia prozesuan.

- (void) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ "Fitxategia aurkitu eta analizatu hasi");

}

Funtzio honek prozesuaren hasieran exekutatzen du. Funtzio honetan ezer ez da beharrezkoa, baina artxiboa analizatzean hasten den zeregin bat egin nahi baduzu, zure kodea jarriko zenuke.

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

NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit / 525.27.1 (KHTML, Gecko bezala) bertsioa / 3.2.1 Safari / 525.27.1";
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[request setValue: agentString forHTTPHeaderField: @ "Erabiltzaile-agentea"];
xmlFile = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil];


articles = [[NSMutableArray assign] init];
errorParsing = NO;

rssParser = [[NSXMLParser esle] initWithData: xmlFile];
[rssParser setDelegate: auto];

// Horietako batzuk alda ditzakezu aztertzen ari zaren XML fitxategi motaren arabera
[rssParser setShouldProcessNamespaces: NO];
[rssParser setShouldReportNamespacePrefixes: NO];
[rssParser setShouldResolveExternalEntities: NO];

[rssParser parse];

}

Funtzio honek azaltzen du motorrak fitxategi jakin bat web helbide jakin batean (URLa) deskargatzeko eta prozesua prozesua hasteko.

Mac zerbitzari bat Safari darabilen urruneko zerbitzaria kontatzen ari gara, zerbitzariak iPhone / iPad bertsio mugikorrera biratzen saiatzen bada.

Amaierako aukerak XML fitxategi jakin batzuei dagozkienak dira. RSS fitxategi eta XML artxibo generiko gehienek ez dute aktibatu behar.

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

NSString * errorString = [NSString stringWithFormat: @ "Errorea% i kodea", [parseError kodea]];
NSLog (@ "Errorea XML analizatzean:% @", errorString);


errorParsing = Bai
}

Errore bat topatzen duen errore-egiaztapen bideratzaile sinple bat da, errore bat topatzen badu. Behar duzuna zehatzagoa beharko duzu hemen egiten duzunaren arabera. Akatsen kasuan tratamendua egin ondoren kode batzuk exekutatu behar badituzu, momentu horretan errore-aldagaia bitar aldagaia deitu daiteke.

- (void) parser: (NSXMLParser *) parser didStartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI sailkatuaName: (NSString *) qName atributuak: (NSDictionary *) attributeDict {
currentElement = [element izena kopiatu];
ElementValue = [[NSMutableString esle] hasierako];
if ([elementName isEqualToString: @ "item"]) {
item = [[NSMutableDictionary esle] hasierako];

}

}

XML analizatzailearen haragiak hiru funtzio ditu, banako elementu baten hasieran, elementua parekatzen duen erdian eta elementuaren amaieran exekutatzen den batena.

Adibide honetan XML artxiboan "elementu" izenburuaren azpian elementu desberdinak azaltzen dituzten RSS fitxategiak antzeko fitxategi bat aztertuko dugu. Prozesuaren hasieran, "elementua" izeneko elementua egiaztatzen dugu eta gure elementu hiztegia esleitzen denean talde berri bat detektatuko da. Bestela, gure aldagaiaren balioa hasiko dugu.

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

Hau erraza da. Karaktereak aurkitzen ditugunean, "ElementValue" aldagaia gehitu besterik ez dugu.

- (void) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI sailkatuaName: (NSString *) qName {
if ([elementName isEqualToString: @ "item"]) {
[artikuluak addObject: [elementu kopiatu]];
} bestela {
[elementu setObject: ElementValue forKey: elementName];
}

}

Elementu bat prozesatzean amaitutakoan, bi gauza egin behar ditugu: (1) amaierako elementua "elementua" bada, amaitu dugu gure taldea, beraz, gure hiztegia gehituko dugu gure "artikuluak" arrayan ".

Edo (2) elementua ez bada "elementua", hiztegian balioa ezarriko dugu elementuaren izena betetzen duen gako batekin. (Horrek esan nahi du ez dugula aldagai indibidualik behar XML eremuko eremu bakoitzarentzat. Horiek prozesatu ditzakegu apur bat gehiago dinamikoki.)

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

if (errorParsing == NO)
{
NSLog (@ "XML prozesatu egin da!");
} bestela {
NSLog (@ "Errorea XML prozesatzean zehar gertatu da");
}

}

Hau gure azterketa errutina behar den azken funtzioa da. Dokumentua amaitzen du. Kaxa amaitu nahi baduzu, hemen prozesua bukatu edo akatsen bat egin nahi baduzu, egin dezakezu.

Gauza bat gauza asko egin ditzakezula hemen gordetzeko datuak eta / edo XML fitxategiak gailuan fitxategian. Horrela, erabiltzaileari Internetera konektatuta ez bazaude aplikazioa kargatzen duten hurrengo aldian, informazio hori ere lor dezakete.

Jakina, ezin dugu ahaztu zatirik garrantzitsuena: zure aplikazioa artxiboa analizatzeko (eta web helbide bat emanez aurkitzeko!).

Prozesua abiarazteko, kode lerro hau gehitu behar duzu XML prozesatzean egin nahi duzun lekuan.

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