Indlela yokuhlukanisa amafayela we-XML ku-Xcode

Umsebenzi owodwa olula ongumgogodla wezinhlelo zokusebenza eziningi yikhono lokudlulisa amafayela we-XML. Futhi, ngenhlanhla, i-Xcode yenza kube lula ukudlulisa ifayela le-XML ku-Objective-C.

Ifayela le- XML lingakwazi ukuqukatha lutho oluvela kudatha eyisisekelo mayelana nehlelo lwakho lokusebenza kusihluthulelo se- RSS sewebhu. Zingaba yindlela enhle yokubuyekeza ulwazi ngaphakathi kohlelo lokusebenza lwakho kude, ngaleyondlela ngokudlula isidingo sokuhambisa ibhanari entsha ku-Apple nje ukufaka into entsha ohlwini.

Ngakho-ke sisebenzisa kanjani amafayela we-XML ku-Xcode? Inqubo iqukethe izinyathelo zokuqala izinguquko okufanele zisetshenziswe, ukuqala inqubo ye-XML yomshuwalense, ukondla inqubo ifayela, ukuqala kwento ngayinye, izinhlamvu (inani) ngaphakathi kwento, ukuphela kwesici somuntu ngamunye, nokuphela kwenqubo yokuphenya.

Kulesi sibonelo, sizobe sidlulisa ifayela kusuka ku-intanethi ngokuyidlulisela ikheli lewebhu elithile ( URL ).

Sizoqala ngokukhipha ifayela eliyinhloko. Lesi yisibonelo sefayili eyinhloko eyisisekelo ye-Detailed View Controller enezidingo ezincane zokuphenya ifayela lethu:

@interface RootViewController: UITableViewController {
ImininingwaneViewController * imininingwaneViewController;

I-NSXMLParser * rssParser;
Izihloko ze-NSMutableArray *;
Into ye-NSMutableDictionary *;
I-NSString * yamanjeElement;
NSMutableString * ElementValue;
Iphutha le-BOOLUkuphawula;
}}

@property (nonatomic, gcina) IBOutlet ImininingwaneViewController * imininingwaneViewController;

- (ayikho) i-XMLFileAtURL: (NSString *) URL;

Umsebenzi we-parseXMLFileAtURL uzoqala inqubo kithi. Uma iphela, i-NSMutableArray "izihloko" izobamba idatha yethu. Amalungu azokwakha izichazamazwi eziguquguqukayo ezinokhiye ezihlobene namagama ensimu kwifayili le-XML.

Manje njengoba sesimise ukuguquguquka okudingekayo, sizoqhubeka nokuhlangabezana nenqubo kufayela le-.m:

- (ayikho) i-parserI-DidStartIsikhumbuzo: (NSXMLParser *) i-parser {
I-NSLog (@ "Ifayela elifunyenwe futhi liqaliswa");

}}

Lo msebenzi ugijima ekuqaleni kwenqubo. Asikho isidingo sokufaka noma yini kulo msebenzi, kodwa uma ufuna ukwenza umsebenzi uma ifayela liqala ukuxoshwa, yilapho ungabeka khona ikhodi yakho.

- (ayikho) i-XMLFileAtURL: (NSString *) URL
{

I-NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit / 525.27.1 (i-KHTML, njenge-Gecko) Version / 3.2.1 Safari / 525.27.1";
Isicelo se-NSMutableURLRequest * = [NSMutableURLRequest isiceloWithURL:
[NSURL URLWithString: URL]];
[isethi yesiceloIndlela: i-agentI-HRTTPHeaderField: @ "Umsebenzisi-Agent"];
xmlFile = [NSURLCconection ithumelaSynchronousUkucela: cela ukubuyaResponse: iphutha le-nil: nil];


izihloko = [[NSMutableArray ukwabiwa] init];
iphuthaParsing = CHA;

rssParser = [[NSXMLParser ukwaziswa] initWithData: xmlFile];
[rssParser setDelegate: self];

// Ungase udingeke ukuvula ezinye zazo ngokuya ngohlobo lwefayela le-XML oyilungisayo
[rssParser setShouldProcessNamespace: NO];
[rssParser setShouldReportNamespacePrefixes: CHA];
[rssParser setShouldResolveIngaphandleIzici: CHA];

[rssParser parse];

}}

Lo msebenzi uyala injini ukulanda ifayela kwikheli lewebhu elithile (i-URL) bese uqala inqubo yokulihlola.

Sitshela iseva esilawuliwe ukuthi singumqhubi we-Safari ku-Mac kuphela uma ngabe iseva izama ukuqondisa kabusha i- iPhone / iPad kwenguqulo yeselula.

Izinketho ekugcineni ziqondile kumafayela athile we-XML. Amafayela amaningi e-RSS namafayela e-generic ye-XML ngeke adinge ukuthi avuliwe.

- (engekho) i-parser: (i-NSXMLParser *) i-parser i-ParrorErrorIxhunyiwe: (NSError *) i-parseIphutha {

I-NSString * iphuthaString = [NSString stringWithFormat: @ "Ikhodi yokuphutha% i", [i-Ereror code]];
I-NSLog (@ "Iphutha ngokuphambana ne-XML:% @", iphuthaLokho);


iphuthaParsing = YESU;
}}

Lokhu kuyindlela elula yokuhlola iphutha ezobeka inani lokubhanana uma lihlangabezana nephutha. Ungadinga okuthile okuchazwe lapha lapha kuye ngokuthi wenzani. Uma nje udingeke usebenze ikhodi ethile ngemva kokucubungula esimeni sephutha, iphuthaUkushintshashintshashintsha kwebhanari kungabizwa ngaleso sikhathi.

- (okungavumelekile) i-parser: (NSXMLParser *) i-parser didStartElement: (NSString *) elementNamepacepaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) izimpawu qName: (NSDictionary *) umqondoDict {
i-currentElement = [ikhophi ye-elementName];
I-ElementValue = [[NSMutableString yabelwa] init];
uma ([elementName kuyintoEqualToString: @ "into"]) {
into = [[NSMutableDictionary ukwabelana] init];

}}

}}

Inyama yomsakazo we-XML iqukethe imisebenzi emithathu, eyodwa egijima ekuqaleni kwento ngayinye, egijima phakathi nendawo yokuphambana nalesi sici, neyodwa egijima ekupheleni kwesici.

Kulesi sibonelo, sizobe sibhekana nefayela elifana namafayela e-RSS ahlukanisa izakhi zibe ngamaqembu ngaphansi kwesihloko "sezinto" ngaphakathi kwefayela le-XML. Ekuqaleni kokucubungula, sibheka igama lesici esithi "into" futhi sibelwe isichazamazwi sento yethu uma kutholakala iqembu elisha. Uma kungenjalo, siqala ukuguquguquka kwethu ngenani.

- (engekho) i-parser: (NSXMLParser *) i-parser itholakalaIzinhlamvu: (NSString *) string {
[I-ElementValue isebenzisa i-string: string];
}}

Lena yingxenye elula. Uma sithola izinhlamvu, sizanezela ekuguqukisweni kwethu "ElementValue".

- (okungekho) i-parser: (NSXMLParser *) i-parser didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName {
uma ([elementName kuyintoEqualToString: @ "into"]) {
[izihloko zengezeOkubhala: [ikhophi yento]];
} enye {
[into isethiObject: ElementValue forKey: elementName];
}}

}}

Uma sesiqedile ukucubungula isici, kudingeka senze okukodwa kwezinto ezimbili: (1) uma isici sokuphela "yinto", sesiqedile iqembu lethu, ngakho-ke sizofaka isichazamagama sethu "ezinhlokweni zethu" ".

Noma (2) uma lesi sici singesona "into", sizobeka inani kwisichazamazwi sethu ngesihluthulelo esifana negama lesici. (Lokhu kusho ukuthi asidingi ukuguquguquka komuntu ngamunye ensimini ngayinye ngaphakathi kwefayela le-XML. Singakwazi ukuwacubungula kancane kancane.)

- (ayikho) i-parserI-Idokhumenti: (i-NSXMLParser *) i-parser {

uma (iphuthaParsing == CHA)
{
I-NSLog (@ "ukuqhutshwa kwe-XML kwenziwe!");
} enye {
I-NSLog (@ "Kuvele iphutha ngesikhathi sokucubungula kwe-XML");
}}

}}

Lona umsebenzi wokugcina odingekayo ohlelweni lwethu lokuphishekela. Iphela kuphela umbhalo. Uzobeka noma iyiphi ikhodi ofuna ukuqeda inqubo lapha noma yini ekhethekile ongase uyenze uma kwenzeka iphutha.

Into eyodwa izinhlelo eziningi ezingase zifune ukuzenza lapha ukugcina idatha kanye / noma ifayela le-XML efayeleni kudivayisi. Ngaleyo ndlela, uma umsebenzisi engaxhunyiwe ku-Intanethi esikhathini esizayo lapho belayisha uhlelo lokusebenza, bangakwazi ukuthola lolu lwazi.

Yiqiniso, asikwazi ukukhohlwa ingxenye ebaluleke kunazo zonke: tshela uhlelo lwakho lokusebenza ukuthi luhlukanise ifayela (futhi linike ikheli lewebhu ukuze lithole khona!).

Ukuze uqale inqubo, umane nje udinga ukwengeza le namba yekhodi endaweni efanele lapho ufuna ukwenza ukucubungula kwe-XML:

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