Wieħed mill-kompiti sempliċi li huwa s-sinsla għal bosta apps hija l-abbiltà li teżamina l-fajls XML. U, fortunatament, Xcode jagħmilha relattivament faċli biex teżamina fajl XML fl-Objettiv-Ċ.
Fajl XML jista 'jkun fih xi ħaġa minn dejta bażika dwar l-app tiegħek għal RSS feed għal websajt. Jistgħu wkoll ikunu mod tajjeb ħafna biex taġġorna l-informazzjoni fi ħdan l-app tiegħek mill-bogħod, u b'hekk tevita l-ħtieġa li tissottometti binarju ġdid lil Apple sempliċement biex iżżid oġġett ġdid għal-lista.
Allura kif nipproċessaw fajls XML f'Xcode? Il-proċess fih passi biex jiġu inizjati l-varjabbli li għandhom jintużaw, billi tibda l-proċess ta 'parser XML, għalf li jipproċessa fajl, il-bidu ta' element individwali, il-karattri (valur) it-tmiem ta 'element individwali, u t-tmiem tal-proċess tal-analiżi.
F'dan l-eżempju, se nħarsu fajl mill-Internet billi jgħadduh indirizz web partikolari ( URL ).
Se nibdew bil-bini tal-fajl tal-header. Dan huwa eżempju ta 'fajl ta' header bażiku ħafna għal Kontrollur tad-Dettall bir-rekwiżiti minimi għall-analiżi tal-fajl tagħna:
@ interface RootViewController: UITableViewController {
DetailViewController * detailViewController;
NSXMLParser * rssParser;
NSMutableArray * oġġetti;
Oġġett NSMutableDictionary *;
NSString * currentElement;
NSMutableString * ElementValue;
BOOL għall-Ħsad;
}
@ proprjetà (mhux anatomika, iżommu) IBOutlet DetailViewController * detailViewController;
- (vojt) parseXMLFileAtURL: (NSString *) URL;
Il-funzjoni parseXMLFileAtURL se tibda l-proċess għalina. Meta tispiċċa, l-artikoli "NSMutableArray" se jżommu d-dejta tagħna. L-array se jkun magħmul minn dizzjunarji mutabbli b'ċavi marbuta ma 'l-ismijiet tal-qasam fil-fajl XML.
Issa li konna nwaqqfu l-varjabbli meħtieġa, aħna nimxu 'l quddiem biex nilħqu l-proċess fil-fajl .m:
- (vojt) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ "Fajl misjub u analizzat beda");
}
Din il-funzjoni tibda fil-bidu tal-proċess. M'hemmx bżonn li tpoġġi xejn f'din il-funzjoni, imma jekk trid tagħmel xogħol meta l-fajl jibda jiġi analizzat, dan huwa fejn tista 'tpoġġi l-kodiċi tiegħek.
- (vojt) parseXMLFileAtURL: (NSString *) URL
{
NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit / 525.27.1 (KHTML, bħal Gecko) Version / 3.2.1 Safari / 525.27.1";
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[titlob settValue: agentString forHTTPHeaderField: @ "User-Agent"];
xmlFile = [NSURLConnection sendSynchronousRequest: request returning Risposta: żball żero: xejn];
oġġetti = [[NSMutableArray alloc] init];
errorParsing = LE;
rssParser = [[NSXMLParser alloc] initWithData: xmlFile];
[rssParser setDelegate: awto];
// Jista 'jkollok bżonn tibdel uħud minn dawn jiddependi mit-tip ta' fajl XML li qed tħejji
[rssParser setShouldProcessNamespaces: LE];
[rssParser setShouldReportNamespacePrefixes: LE];
[Ir-Riżorsi tas-Sajf setgħu jirrisolvu l-Istituzzjonijiet ta 'Barra: LE];
[rssParser parse];
}
Din il-funzjoni tagħti struzzjonijiet lill-magna biex tniżżel fajl f'indirizz tal-web partikolari (URL) u tibda l-proċess biex tiskopriha.
Aħna ngħidu lis-server remot li aħna Safari qed taħdem fuq Mac biss f'każ li s-server jipprova jbiddel l- iPhone / iPad għal verżjoni mobbli.
L-għażliet fl-aħħar huma speċifiċi għal ċerti fajls XML. Ħafna mill-fajls RSS u fajls XML ġeneriċi ma jkollhomx bżonnhom mixgħula.
- (vojt) parser: (NSXMLParser *) parser parseErrorOccurred: (NSError *) parseError {
NSString * errorString = [NSString stringWithFormat: @ "Kodiċi ta 'l-iżball% i", [parseError code]];
NSLog (@ "Error parsing XML:% @", errorString);
żballParsing = IVA;
}
Dan huwa sempliċi routing tal-iċċekkjar tal-iżbalji li se jiffissa valur binarju jekk jiltaqa 'ma' żball. Jista 'jkollok bżonn xi ħaġa iktar speċifika hawn skond x'qed tagħmel. Jekk sempliċiment għandek bżonn li tmexxi xi kodiċi wara l-ipproċessar fil-każ ta 'żball, il-varjabbli binarja ta' żballParsing tista 'tissejjaħ dak iż-żmien.
- (invalid) parser: (NSXMLParser *) parser didStartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI kwalifikataName: (NSString *) qName attributi: (NSDictionary *) attributDict {
currentElement = [il-kopja elementName];
ElementValue = [[NSMutableString alloc] init];
jekk ([elementName huwaEqualToString: @ "oġġett"]) {
oġġett = [[NSMutableDictionary alloc] init];
}
}
Il-laħam tal-parser XML fih tliet funzjonijiet, waħda li tibda fil-bidu ta 'element individwali, wieħed li jmur fin-nofs tal-analiżi tal-element, u dik li tmur fit-tarf tal-element.
Għal dan l-eżempju, se nħarsu fajl simili għal fajls RSS li jgħaqqdu elementi fi gruppi taħt l-intestatura ta '"oġġetti" fi ħdan il-fajl XML. Fil-bidu tal-ipproċessar, qed niċċekkjaw l-isem tal-element "oġġett" u nallokaw id-dizzjunarju tal-oġġett tagħna meta jinstab grupp ġdid. Inkella, aħna nibdew il-varjabbli tagħna għall-valur.
- parser (vojt): (NSXMLParser *) parser misjuba Persuni: (NSString *) string {
[ElementValue appendString: spag];
}
Din hija l-parti faċli. Meta insibu karattri, aħna sempliċement inżidhom mal-varjabbli "ElementValue" tagħna.
- (invalid) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI kwalifikataName: (NSString *) qName {
jekk ([elementName huwaEqualToString: @ "oġġett"]) {
[oġġetti addObject: [kopja ta 'oġġett]];
} ieħor {
[item setObject: ElementValue forKey: elementName];
}
}
Meta aħna lestejna l-ipproċessar ta 'element, għandna bżonn nagħmlu waħda minn żewġ affarijiet: (1) jekk l-element finali huwa "oġġett", aħna lestejna l-grupp tagħna, hekk aħna niżdiedu d-dizzjunarju tagħna fil-firxa tagħna ta' "artikli ".
Jew (2) jekk l-element mhuwiex "oġġett", aħna nispjegaw il-valur fid-dizzjunarju tagħna b'kelma li taqbel ma 'l-isem ta' l-element. (Dan ifisser li m'għandniex bżonn ta 'varjabbli individwali għal kull qasam fi ħdan il-fajl XML. Nistgħu nipproċessawhom ftit aktar b'mod dinamiku.)
- (vojt) parserDidEndDocument: (NSXMLParser *) parser {
jekk (errorParsing == LE)
{
NSLog (@ "Proċessar XML magħmul!");
} ieħor {
NSLog (@ "Ġara żball waqt l-ipproċessar tal-XML");
}
}
Din hija l-aħħar funzjoni meħtieġa għar-rutina tal-analiżi tagħna. Hija sempliċiment tispiċċa d-dokument. Int ser tpoġġi kwalunkwe kodiċi li tixtieq tispiċċa l-proċess hawn jew xi ħaġa speċjali li tista 'tixtieq tagħmel f'każ ta' żball.
Ħaġa waħda li ħafna apps jistgħu jixtiequ li jagħmlu hawn hija li tiffranka d-data u / jew il-fajl XML għal fajl fuq l-apparat. B'dan il-mod, jekk l-utent ma jkunx imqabbad ma 'l-Internet il-ħin li jmiss iġorr l-app, xorta jistgħu jsibu din l-informazzjoni.
Naturalment, ma nistgħux ninsew l-aktar parti importanti: tgħid l-applikazzjoni tiegħek biex tanalizza l-fajl (u tagħtih indirizz tal-internet biex issibha!).
Biex tibda l-proċess, għandek sempliċement iżżid din il-linja tal-kodiċi mal-post xieraq fejn trid tagħmel l-ipproċessar tal-XML:
[awto parseXMLFileAtURL: @ "http://www.webaddress.com/file.xml"];