Mar a Phàsaicheas tu Fhaidhlichean XML ann an Xcode

Is e aon ghnìomh sìmplidh a tha na cnàmhan-cùil do iomadh aplacaid an comas faidhlichean XML a pharsadh. Agus, gu fortanach, tha Xcode ga dhèanamh gu ìre mhath furasta am faidhle XML a pharsadh ann an Objective-C.

Faodaidh faidhle XML rud sam bith a bhith ann bho fhiosrachadh bunaiteach mun aplacaid agad gu RSS RSS airson làrach-lìn. Faodaidh iad cuideachd a bhith nan deagh dhòigh air fiosrachadh a thoirt am broinn an aplacaid agad gu sgiobalta, agus mar sin a 'seachnadh an fheum air dineal ùr a chuir a-steach gu Apple dìreach gus rud ùr a chur ri liosta.

Mar sin, ciamar a bhios sinn a 'pròiseasadh faidhlichean XML ann an Xcode? Tha ceuman anns a' phròiseas airson a bhith a 'cur nan caochlaidhean ri chleachdadh, a' tòiseachadh leis a 'phròiseas pearsantachd XML, a' toirt am faidhle sin faidhliche, toiseach aonamaid fa leth, na caractaran (luach) taobh a- deireadh eileamaid fa leth, agus deireadh a 'phròiseis parsaidh.

San eisimpleir seo, bidh sinn a 'parsadh faidhle bhon eadar-lìon le bhith a' toirt seachad seòladh lìn sònraichte ( URL ).

Tòisichidh sinn le bhith a 'togail a-mach am faidhle ceannard. Seo eisimpleir de fhaidhle ceann-sgrìobhaidh fìor bhunasach airson Riaghladair Dealbhaidh le mion-fhiosrachadh le na riatanasan as lugha airson a bhith a 'parsadh ar faidhle:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;

NSXMLParser * rssParser;
NSMutableArray * artaigilean;
NSMtableDictionary * item;
NSString * currentElement;
NSMutableString * ElementValue;
Mearachdachadh BOOL;
}

@property (neo-ghnìomhach, glèidhte) IBOutlet DetailViewController * detailViewController;

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

Tòisichidh am prògram parseXMLFileAtURL am pròiseas dhuinn. Nuair a thig e gu crìch, cumaidh na "artaigilean" NSMutableArray "ar dàta. Bidh an taghadh air a dhèanamh suas de fhaclairean mutable le iuchraichean co-cheangailte ris na h-ainmean achaidh anns an fhaidhle XML.

A-nis gu bheil sinn air na caochlaidhean a tha a dhìth a chuir air dòigh, gluaisidh sinn air adhart gu coinneamh a 'phròiseis sa fhaidhle .m:

- (falamh) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ "lorg faidhle agus pòsadh air tòiseachadh");

}

Bidh an dreuchd seo a 'ruith aig toiseach a' phròiseis. Chan fheum càil a chuir a-steach san dreuchd seo, ach ma tha thu airson obair a dhèanamh nuair a thòisicheas am faidhle air a parsadh, is ann far an cuir thu do chòd an seo.

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

NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit / 525.27.1 (KHTML, mar Gecko) Version / 3.2.1 Safari / 525.27.1";
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[request setValue: agentString forHTTPHeaderField: @ "Cleachdaiche-gnìomhaiche"];
xmlFile = [NSURLConnection sendSynchronousRequest: iarrtas returnResponse: nil error: nil];


artaigilean = [[roinn NSMutableArray] init];
errorParsing = CHA BHI;

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

// Dh'fhaoidte gum feum thu cuid de na tionndadh sin a dhèanamh a rèir an seòrsa faidhle XML a tha thu a 'parsadh
[rssParser setShouldProcessNamespaces: THA];
[rssParser setShouldReportNamespacePreisean: CHAN EIL];
[rssParser setShouldResolveExternalEntities: NO];

[parseachd rssParser];

}

Tha an gnìomh seo a 'stiùireadh an einnsean airson faidhle a luchdachadh sìos aig seòladh lìn sònraichte (URL) agus tòiseachadh air a' phròiseas airson a parsadh.

Tha sinn ag innse don fhrithealaiche iomallach gur e Safari a th 'annainn a tha a' ruith air Mac ach ma bhios an neach-frithealaidh a 'feuchainn ris an iPhone / iPad ath-stiùireadh gu tionndadh gluasadach.

Tha na roghainnean aig an deireadh sònraichte do fhaidhlichean XML sònraichte. Cha fheum a 'mhòr-chuid de na faidhlichean RSS agus na faidhlichean XML coitcheann a bhith air an tionndadh.

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

NSString * errorString = [NSString stringWithFormat: @ "Còd mearachd% i", [code parseError]];
NSLog (@ "Mearachd a 'parsadh XML:% @", errorString);


errorParsing = THA;
}

Is e seo rèiteachadh sìmplidh sgrùdadh mearachd a shuidhicheas luach dineach ma choinnicheas e mearachd. Dh'fhaodadh gum bi feum agad air rud a tha nas sònraichte an seo a rèir dè tha thu a 'dèanamh. Ma dh'fheumas tu dìreach còd a ruith an dèidh a bhith a 'giullachd ann an cùis mearachd, faodar an caochladh caochlaideach mearachd a ghairm aig an àm sin.

- (fala) parser: (NSXMLParser *) parser didStartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) q Feartan ainm: (NSDictionary *) attributeDict {
currentElement = [copy copy];
ElementValue = [[NSMutableString alloc] init];
ma tha ([elementName isEqualToString: @ "item"]) {
item = [[roinn NSMutableDictionary] init];

}

}

Tha feòil am parsair XML a 'toirt a-steach trì gnìomhan, aon a bhios a' ruith aig toiseach eileamaid fa leth, aon a bhios a 'ruith aig meadhan parsaidh an eileamaid, agus fear a bhios a' ruith aig deireadh an eileamaid.

Airson an eisimpleir seo, bidh sinn a 'parsadh faidhliche coltach ri faidhlichean RSS a bhios a' briseadh a-steach do bhuidhnean fo cheannard "nithean" taobh a-staigh an fhaidhle XML. Aig toiseach a 'ghiollachd, tha sinn a' coimhead airson ainm "nì" an eileama agus a 'riarachadh ar faclair nì nuair a thèid buidheann ùr a lorg. Air an làimh eile, cuiridh sinn an caochlaideach againn airson an luach.

- (falamh) parser: (NSXMLParser *) parser foundCharacters: (NSString *) sreang {
[ElementValue appendString: sreang];
}

Is e seo an earrann furasta. Nuair a lorgas sinn caractaran, bidh sinn dìreach gan cur ris an atharrachadh "ElementValue" againn.

- (void) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName {
ma tha ([elementName isEqualToString: @ "item"]) {
[article addObject: [item copy]];
} eile {
[item setObject: ElementValue forKey: elementName];
}

}

Nuair a chrìochnaicheas sinn a bhith a 'giullachd eileamaid, feumaidh sinn aon de dhà rud a dhèanamh: (1) ma tha an eileamaid deireannach "nì", tha sinn air crìoch a chur air a' chuantal againn, mar sin cuiridh sinn ar faclair ris an raon de "artaigilean againn ".

No (2) mura h-eil an eileamaid "nì", cuiridh sinn am facal anns an fhaclair againn le iuchair a tha a 'maidseadh ainm an eileamaid. (Tha seo a 'ciallachadh nach fheum sinn caochlaideach fa leth airson gach raon taobh a-staigh an fhaidhle XML. Is urrainn dhuinn am pròiseas beagan a dhèanamh gu dà-chànanach.)

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

ma tha (errorParsing == NO)
{
NSLog (@ "pròiseas XML dèante!");
} eile {
NSLog (@ thachair "Mearachd tro phròiseas XML");
}

}

Is e seo an fheum mu dheireadh a dh 'fheumar airson an dòigh-obrach parsaidh againn. Tha e dìreach a 'crìochnachadh na sgrìobhainn. Cuiridh tu còd sam bith a tha thu airson crìoch a chur air a 'phròiseas an seo no rud sam bith sònraichte a dh' fhaodadh tu a dhèanamh ma thachras mearachd.

Is e aon rud a dh 'fhaodadh iomadh aplacaid a bhith ag iarraidh a dhèanamh an seo gus an dàta agus / no faidhle XML a shàbhaladh gu faidhle air an inneal. Mar sin, mura h-eil an neach-cleachdaidh ceangailte ris an eadar-lìon an ath thuras a bhios iad a 'luchdachadh an aplacaid, faodaidh iad fhathast fhaighinn aig an fhiosrachadh seo.

Gu dearbh, chan urrainn dhuinn a 'phàirt as cudromaiche a dhìochuimhneachadh: ag innse do thagradh airson am faidhle a pharsadh (agus seòladh lìn a thoirt dha airson a lorg aig!).

Gus am pròiseas a thòiseachadh, feumaidh tu an loidhne chòd seo a chur ris an àite iomchaidh far a bheil thu airson a 'phròiseas XML a dhèanamh:

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