Conas Comhaid XML a Pháirceáil i Xcode

Is é tasc simplí amháin a bhfuil an chnámh droma le go leor apps an cumas chun comhaid XML a pháirceáil. Agus, go fortunately, déanann Xcode go bhfuil sé sách éasca comhad XML a pharsáil i Cuspóir-C.

Is féidir le comhad XML rud ar bith a bheith ann ó bhunúsacha maidir le d'iarratas chuig fotha RSS ar shuíomh gréasáin. Is féidir leo a bheith ina bhealach iontach chun faisnéis a thabhairt cothrom le dáta laistigh d'app go cianda, rud a fhágann an gá atá le dénártha nua a chur faoi bhráid Apple ach mír nua a chur le liosta.

Mar sin, conas a dhéanaimid próiseas XML a phróiseáil i Xcode? Tá céimeanna sa phróiseas chun na hathróga a úsáid a thosú, ag tosú ar an bpróiseas parser XML, ag comhad an phróisis sin, comhad eilimint aonair, na carachtair (luach) laistigh den eilimint, deireadh eilimint aonair, agus deireadh an phróisis phaireála.

Sa sampla seo, beidh muid ag parsáil comhad ón Idirlíon trí sheoladh gréasáin áirithe ( URL ) a chur air.

Tosóimid ag tógáil amach an comhad ceannteidil. Seo sampla de chomhad ceannteidil an-bhunúsach le haghaidh Rialaitheoir Amharc Sonraí le na ceanglais íosta chun ár gcomhad a pháirtáil:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;

NSXMLParser * rssParser;
Earraí NSMutableArray *;
NSMutableDictionary * item;
NSString * currentElement;
NSMutableString * ElementValue;
Earráid BOOL;
}

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

- (neamhní) parseXMLFileAtURL: (NSString *) URL;

Tosóidh an fheidhm parseXMLFileAtURL an próiseas dúinn. Nuair a chríochnaíonn sé, coimeádfaidh na "earraí" NSMutableArray ár gcuid sonraí. Beidh foclóirí mutable ina n-eochracha a bhaineann leis na hainmneacha páirce sa chomhad XML sa tsraith.

Anois go bhfuil na hathróga a theastaíonn uainn bunaithe, déanfaimid bogadh ar aghaidh go dtí an bpróiseas sa chomhad .m:

- (neamhní) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ "Fuair ​​comhad agus parsáil thosaigh");

}

Ritheann an fheidhm seo ag tús an phróisis. Ní gá aon ní a chur san fheidhm seo, ach más mian leat tasc a dhéanamh nuair a thosaíonn an comhad a phársáil, is é seo an áit a gcuirfí do chód.

- (neamhní) parseXMLFileAtURL: (NSString *) URL
{

NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit / 525.27.1 (KHTML, cosúil le Gecko) Version / 3.2.1 Safari / 525.27.1";
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[request setValue: agentString forHTTPHeaderField: @ "Úsáideoir-Gníomhaire"];
xmlFile = [NSURLConnection sendSynchronousRequest: iarr returnResponse: earráid nil: nil];


earraí = [[NSMutableArray leithdháileadh] init];
errorParsing = NÍL;

rssParser = [[leithdháileadh NSXMLParser] initWithData: xmlFile];
[rssParser setDelegate: self];

// B'fhéidir go gcaithfidh tú cuid díobh seo a dhéanamh, ag brath ar an gcineál comhad XML atá á parsáil agat
[rssParser setShouldProcessNamespaces: NÍL];
[rssParser setShouldReportNamespace Réamhshocraithe: NÍL];
[rssParser setShouldResolveExternalEntities: NÍL];

[paráid rssParser];

}

Tugann an fheidhm seo treoir don inneall comhad a íoslódáil ag seoladh gréasáin áirithe (URL) agus tús a chur leis an bpróiseas chun é a parsáil.

Táimid ag insint don fhreastalaí iargúlta go bhfuil Safari á reáchtáil againn ar Mac ach amháin i gcás go bhfuil an freastalaí ag iarraidh an iPhone / iPad a atreorú chuig leagan soghluaiste.

Tá na roghanna ag an deireadh sainiúla do chomhaid XML áirithe. Ní ghlacfar leis na comhaid RSS is mó agus comhaid XML cineálacha iad a athrú.

- parser (neamhní): (NSXMLParser *) parse parseErrorOccurred: (NSError *) parseError {

NSString * errorString = [NSString stringWithFormat: @ "Cód Earráid% i", [cód parseError]];
NSLog (@ "Earráid ag parsáil XML:% @", errorString);


errorParsing = TÁ;
}

Seo rianú simplí earráide a shocróidh luach dénártha má bhíonn earráid air. Féadfaidh tú rud éigin níos sainiúla a bheith ag teastáil anseo ag brath ar an méid atá á dhéanamh agat. Más gá duit roinnt cód a reáchtáil tar éis a phróiseáil i gcás earráide, is féidir an t-athróg dénártha earráide a ghlaoch ag an am sin.

- (neamhní) parser: (NSXMLParser *) parser didStartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI cáilitheName: (NSString *) q tréitheName: (NSDictionary *) attributeDict {
currentElement = [cóip elementName];
ElementValue = [[NSMutableString alloc] init];
más rud é ([elementName isEqualToString: @ "item"]) {
item = [[NSMutableDictionary alloc] init];

}

}

Tá trí fheidhme ag feoil an pharsóra XML, ceann a ritheann ag tús eilimint aonair, ceann a ritheann i lár an eilimint, agus ceann a ritheann ag deireadh an eilimint.

Maidir leis an sampla seo, déanfaimid parsáil comhad cosúil le comhaid RSS a bhriseadh síos i ngrúpaí faoin gceannteideal "míreanna" laistigh den chomhad XML. Ag tús na próiseála, táimid ag seiceáil don ainm eilimint "mír" agus déantar foclóir ár n-ábhar a leithdháileadh nuair a aimsítear grúpa nua. Seachas sin, cuirimid in iúl ár n-athróg don luach.

- parser (neamhní): (NSXMLParser *) parser foundCharacters: (NSString *) teaghrán {
[ElementValue appendString: teaghrán];
}

Is é seo an chuid éasca. Nuair a fhaigheann muid carachtair, cuirimid iad ar ár n-athróg "ElementValue".

- (neamhní) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI cáilitheName: (NSString *) qName {
más rud é ([elementName isEqualToString: @ "item"]) {
[articles addObject: [item copy]];
} eile {
[item setObject: ElementValue forKey: elementName];
}

}

Nuair a chríochnaigh muid eilimint a phróiseáil, ní mór dúinn ceann amháin de dhá rud a dhéanamh: (1) más rud é gurb í an ghné deiridh "mír", críochnaigh muid ár ngrúpa, mar sin cuirfimid ár bhfoclóir ar ár sraith "earraí ".

Nó (2) más rud é nach "mír" an eilimint, socróimid an luach inár bhfoclóir le heochair a luíonn ainm an eilimint. (Ciallaíonn sé seo nach gá dúinn athróg aonair do gach réimse laistigh den chomhad XML. Is féidir linn iad a phróiseáil beagán níos dinimiciúil).

- (neamhní) parserDidEndDocument: (NSXMLParser *) parser {

más rud é (errorParsing == NÍL)
{
NSLog (@ "próiseáil XML déanta!");
} eile {
NSLog (@ "Tharla earráid le linn próiseála XML");
}

}

Is é seo an fheidhm dheireanach is gá dár ngnáthamh parsála. Críochnaíonn sé an doiciméad ach. Cuirfidh tú aon chód ar mhaith leat an próiseas a chríochnú anseo nó aon rud ar bith ar mhaith leat a dhéanamh i gcás earráide.

Is é an rud a d'fhéadfadh go leor apps a dhéanamh anseo ná na sonraí agus / nó comhad XML a shábháil ar chomhad ar an bhfeiste. Ar an mbealach sin, mura bhfuil an t-úsáideoir ceangailte leis an Idirlíon an chéad uair eile a luchtaíonn siad an t-iarratas, is féidir leo a fháil ar an eolas seo fós.

Ar ndóigh, ní féidir linn dearmad a dhéanamh ar an gcuid is tábhachtaí: ag insint d'iarratas chun an comhad a pháirceáil (agus seoladh gréasáin a thabhairt dó chun é a fháil ag!).

Chun an próiseas a thosú, ní mór duit ach an líne cód seo a chur leis an áit chuí inar mhaith leat an próiseáil XML a dhéanamh:

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