Ki jan yo Parse dosye XML nan Xcode

Yon travay ki senp ki se zo rèl do a anpil apps se kapasite nan parse dosye XML. Epi, erezman, Xcode fè li relativman fasil analize yon dosye XML nan Objektif-C.

Yon dosye XML ka gen ladan anyen soti nan done debaz sou app ou nan yon RSS feed pou yon sit entènèt. Yo kapab tou yon bon fason pou mete ajou enfòmasyon nan app ou adistans, kidonk contournement bezwen an pou yo soumèt yon nouvo binè Apple tou senpleman ajoute yon nouvo atik nan yon lis.

Se konsa, kouman nou trete dosye XML nan Xcode? Pwosesis la gen etap pou inisyalize varyab yo dwe itilize, kòmanse pwosesis la parser XML, manje ki pwosesis yon dosye, kòmanse nan yon eleman endividyèl, karaktè yo (valè) nan eleman an, nan fen yon eleman endividyèl, ak nan fen pwosesis la analyse.

Nan egzanp sa a, nou pral analize yon dosye soti nan entènèt la pa pase li yon adrès sit entènèt patikilye ( URL ).

Nou pral kòmanse ak bati soti dosye a header. Sa a se yon egzanp yon dosye header trè debaz pou yon View View kontwolè ak kondisyon yo minimòm pou analyse dosye nou an:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;

NSXMLParser * rssParser;
NSMutableArray * atik;
NSMutableDictionary * atik;
NSString * currentElement;
NSMutableString * ElementValue;
BOOL erèParsing;
}}

@ pwoprete (nonatomic, kenbe) IBOutlet DetailViewController * detailViewController;

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

Fonksyon parseXMLFileAtURL la pral kòmanse pwosesis la pou nou. Lè li fini, NSMutableArray "atik yo" pral kenbe done nou an. Yo pral mete etalaj la nan diksyonè dictionnaire ak kle ki gen rapò ak non yo jaden nan dosye a XML.

Koulye a, ke nou te mete kanpe varyab yo bezwen, nou pral deplase sou yo satisfè nan pwosesis la nan dosye a .m:

- (anile) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ "File te jwenn ak analyse te kòmanse");

}}

Fonksyon sa a kouri nan kòmansman pwosesis la. Pa gen okenn bezwen mete anyen nan fonksyon sa a, men si ou vle fè yon travay lè dosye a kòmanse yo dwe analysé, sa a se kote ou ta mete kòd ou a.

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

NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-nou) AppleWebKit / 525.27.1 (KHTML, tankou Gecko) Version / 3.2.1 Safari / 525.27.1";
NSMutableURLRequest * demann = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[mande setValue: agentString forHTTPHeaderField: @ "User-Agent"];
xmlFile = [NSURLConnection voyeSynchronousRequest: retounen demannResponse: nil erè: nil];


atik = [[NSMutableArray alimite] init];
erèParsing = NON;

rssParser = [[NSXMLParser alokasyon] initWithData: xmlFile];
[rssParser setDelegate: pwòp tèt ou];

// Ou ka bezwen vire kèk nan sa yo sou depann sou kalite a nan dosye XML ou se analyzes
[rssParser setShouldProcessNamespaces: NON];
[rssParser setShouldReportNamespacePrefixes: NON];
[rssParser setShouldResolveExternalEntities: NON];

[rssParser parse];

}}

Fonksyon sa a enstwi motè a pou telechaje yon dosye nan yon adrès sit entènèt patikilye (URL) epi yo kòmanse pwosesis la pou analyse li.

Nou ap di sèvè a aleka ke nou se yon Safari kouri sou Mac jis nan ka sèvè a ap eseye redireksyon iPhone a / iPad nan yon vèsyon mobil.

Opsyon yo nan fen a se espesifik nan sèten dosye XML. Pifò RSS dosye ak dosye jenerik XML pa pral bezwen yo vire sou.

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

NSString * errorString = [NSString stringWithFormat: @ "Erè kòd mwen", [parseError code]];
NSLog (@ "Erè parsing XML:% @", errorString);


erèParsing = Wi;
}}

Sa a se yon woutin ki senp-tcheke routage ki pral mete yon valè binè si li rankont yon erè. Ou ka bezwen yon bagay plis espesifik isit la depann sou sa w ap fè. Si ou tou senpleman bezwen kouri kèk kòd apre yo fin tretman nan ka a nan erè, ka erè varyab la binèr erè dwe rele nan tan sa a.

- (anile) parser: (NSXMLParser *) parser didStartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI kalifyeName: (NSString *) qName atribi: (NSDictionary *) attributeDict {
currentElement = [eleman non kopi];
ElementValue = [[NSMutableString ali] init];
si ([elementName isEqualToString: @ "item"]) {
atik = [[NSMutableDictionary alimite] init];

}}

}}

Vyann nan nan parsè a XML gen twa fonksyon, yon sèl ki kouri nan kòmansman yon eleman endividyèl, youn ki kouri pandan mitan an nan analyse eleman an, ak yon sèl ki kouri nan fen eleman an.

Pou egzanp sa a, nou pral analize yon dosye menm jan ak RSS dosye ki kraze eleman an gwoup anba tit "atik" nan dosye a XML. Nan kòmansman an nan pwosesis la, nou ap tcheke pou non an "atik" eleman ak allocation diksyonè nou an lè yon nouvo gwoup detekte. Sinon, nou inisyalize varyab nou an pou valè a.

- (anile) parser: (NSXMLParser *) parser foundCharacters: (NSString *) fisèl {
[ElementValue appendString: fisèl];
}}

Sa a se pati a fasil. Lè nou jwenn karaktè, nou tou senpleman ajoute yo nan varyab nou an "ElementValue".

- (anile) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName namespaceURI: (NSString *) nonpaceURI kalifyeName: (NSString *) qName {
si ([elementName isEqualToString: @ "item"]) {
[atik addObject: [atik kopi]];
} lòt bagay {
[atik setObject: ElementValue forKey: elemanName];
}}

}}

Lè nou fini pwosesis yon eleman, nou bezwen fè youn nan de bagay: (1) si eleman nan fen a se "atik", nou fini gwoup nou an, se konsa nou pral ajoute diksyonè nou an etalaj nou an nan "atik ".

Oswa (2) si eleman an se pa "atik", nou pral mete valè a nan diksyonè nou an ak yon kle ki matche non eleman an. (Sa vle di nou pa bezwen yon varyab endividyèl pou chak jaden nan dosye XML la. Nou ka travay sou yo yon ti kras plis dynamique.)

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

si (errorParsing == NON)
{
NSLog (@ "pwosesis XML fè!");
} lòt bagay {
NSLog (@ "Erè ki te fèt pandan pwosesis XML");
}}

}}

Sa a se fonksyon an dènye ki nesesè pou woutin analize nou an. Li senpleman fini dokiman an. Ou pral mete nenpòt kòd ou vle fini pwosesis la isit la oswa nenpòt bagay espesyal ou ta ka vle fè nan ka ta gen erè.

Yon bagay anpil apps ka vle fè isit la se pou konsève pou done yo ak / oswa dosye XML nan yon dosye sou aparèy la. Nan fason sa a, si itilizatè a pa konekte sou entènèt la tan kap vini an yo chaje app a, yo ka toujou jwenn nan enfòmasyon sa a.

Natirèlman, nou pa ka bliye pati ki pi enpòtan an: di aplikasyon ou an analyse dosye a (ak bay li yon adrès entènèt jwenn li nan!).

Pou kòmanse pwosesis la, ou tou senpleman bezwen ajoute liy sa a nan kòd nan plas ki apwopriye a kote ou vle fè pwosesis la XML:

[pwòp tèt ou parseXMLFileAtURL: @ "http://www.webaddress.com/file.xml"];