Yadda za a Buga fayiloli XML a cikin Xcode

Ɗaya mai sauƙi wanda shine kashin baya zuwa aikace-aikacen da yawa shi ne ikon ƙirƙirar fayilolin XML. Kuma, abin farin cikin, Xcode ya sa ya zama mai sauƙi a kwashe wata hanyar XML a Objective-C.

Wata hanyar XML na iya ƙunsar wani abu daga asali na asali game da app ɗinka ga feed RSS don shafin yanar gizo. Suna iya zama hanya mai mahimmanci na sabunta bayanai a cikin aikace-aikacenka ta hanya, ta haka ne ke kewaye da buƙatar gabatar da sabon binary zuwa Apple kawai don ƙara sabon abu zuwa jerin.

Don haka ta yaya za mu aiwatar da fayiloli XML a cikin Xcode? Tsarin ya ƙunshi matakai don farawa da masu amfani da zazzagewa, farawa tsarin tafiyar da XML, ciyar da wannan tsari a fayil, farawar wani ɓangaren mutum, haruffan (darajar) a cikin kashi, ƙarshen wani ɓangare na mutum, da kuma ƙarshen tsarin yin fassarar.

A cikin wannan misali, zamu ci gaba da aika fayil daga Intanet ta hanyar wucewa ta adireshin yanar gizo ( URL ).

Za mu fara da sake gina fayil din kai. Wannan shi ne misalin mahimman rubutun mahimmanci ga mai sarrafawa na Detail tare da ƙananan bukatun don dakatar da fayil din mu:

GabatarwaController: UITableViewController {
DetailViewController * daki-dakiViewController;

NSXMLParser * rssParser;
NSMutableArray * articles;
Ƙaddamarwa ta GoogleMakuta * abu;
NSString * yanzuElement;
NSMutableString * ElementValue;
Shirya kuskuren BOOL;
}

@property (nonatomic, riƙe) Ibautlet DetailViewController * daki-dakiViewController;

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

Ayyukan parseXMLFileAtURL zai fara aikin a gare mu. Lokacin da ya ƙare, "articles" na "NSMutableArray" za su riƙe bayanan mu. Za'a samar da tsararren ƙamus na wucin gadi tare da makullin da suka danganci filin sunayen a cikin fayil na XML.

Yanzu da muka kafa samfurori da ake buƙata, za mu matsa zuwa gamuwa da tsari a cikin fayil na .m:

- (void) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ "Fayil da aka samo da kuma farawa fara");

}

Wannan aikin yana gudana a farkon tsari. Babu buƙatar sanya wani abu a cikin wannan aikin, amma idan kana so ka yi aiki lokacin da fayiloli ya fara farawa, wannan shine inda zaka sanya lambarka.

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

NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Mac OS X 10_5_6; en-us) AppleWebKit / 525.27.1 (KHTML, kamar Gecko) Version / 3.2.1 Safari / 525.27.1";
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[buƙatar adireshin wakili na wakili naSQL forHTTPHeaderField: @ "Mai amfani-mai amfani"];
xmlFile = [NSURLConnection sendSynchronousRequest: buƙatar mayar da martani: kuskuren nil: nil];


articles = [[NSMutableArray allo] init];
errorParsing = NO;

rssParser = [[NSXMLParser kasuwa] initWithData: xmlFile];
[rssParser setDelegate: kai];

// Kila iya buƙatar wasu daga cikin wadannan dangane da nau'in fayil na XML da kake kwashewa
[rssParser setShouldProcessNamespaces: NO];
[rssParser setShouldReportNamespacePrefixes: NO];
[rssParser setShouldResolveExternalEntities: NO];

[rssParser parse];

}

Wannan aikin ya umarci injiniya don sauke fayil a wani adireshin yanar gizo (URL) kuma fara aiwatar da shi don kaddamar da shi.

Muna gaya wa uwar garken nesa cewa muna Safari ne a kan Mac kawai idan uwar garken yayi ƙoƙarin sake tura iPhone / iPad zuwa wayar hannu.

Zaɓuɓɓuka a ƙarshen sune musamman ga wasu fayilolin XML. Yawancin fayilolin RSS da fayiloli na XML ba su buƙatar su kunna ba.

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

NSString * errorString = [NSString stringWithFormat: @ "lambar kuskure% i", [parseError code]];
NSLog (@ "Kuskuren da ke aiwatar da XML:% @", errorString);


errorParsing = YES;
}

Wannan kuskure ne mai sauƙi-saukewa na dubawa wanda zai saita darajar binary idan ta fuskanci kuskure. Kila iya buƙatar wani abu da ya fi dacewa a nan dangane da abin da kake yi. Idan kuna buƙatar gudu ne kawai bayan an yi aiki a cikin ɓangaren kuskure, za a iya kiran kuskuren binary errorParsing a wannan lokacin.

- (void) parser: (NSXMLParser *) parser didStartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI sunayeName: (NSString *) halayen suna: (NSDictionary *) attributeDict {
currentElement = [elementName kwafin];
ElementValue = [[NSMutableString haɓaka];
idan ([elementName isEqualToString: @ "abu"]) {
abu =

}

}

Naman mai kwakwalwa ta XML yana ƙunshe da ayyuka uku, wanda ke gudana a farkon mutum guda, wanda ke gudana a tsakiyar tsakiyar fashewa, kuma wanda ke gudana a ƙarshen rabi.

Ga wannan misali, zamu ci gaba da yin kama da fayilolin RSS wanda ya rushe abubuwa a cikin kungiyoyi a ƙarƙashin "abubuwan" a cikin fayil na XML. A farkon aiki, muna bincika sunan "abu" mai suna "yanki" da kuma rarraba ƙamus ɗin mu idan an gano sabon ƙungiya. In ba haka ba, za mu fara mana canjin don darajar.

- (void) parser: (NSXMLParser *) parser foundCharacters: (NSString *) kirtani {
[ElementValue appendString: string];
}

Wannan shi ne sauki sashi. Idan muka sami haruffa, za mu ƙara su kawai zuwa madadinmu "ElementValue".

- (void) parser: (NSXMLParser *) parser Ya yi: (NSString *) elementName namespaceURI: (NSString *) namespaceURI cancanciName: (NSString *) qName {
idan ([elementName isEqualToString: @ "abu"]) {
[articles addObject: [abu copy]];
} da {
[abu setObject: ElementValue forKey: elementName];
}

}

Idan muka gama aiki wani kashi, muna bukatar muyi daya daga cikin abubuwa guda biyu: (1) idan batun karshen shine "abu", mun gama ƙungiyar mu, don haka za mu kara mana ƙamus zuwa jerinmu na "articles ".

Ko kuma (2) idan kashi ba "abu" ba, za mu saita darajar a cikin ƙamusmu tare da maɓallin da ya dace da sunan mai suna. (Wannan yana nufin ba mu buƙatar sauƙaƙƙen mutum don kowanne filin cikin fayil na XML. Za mu iya sarrafa su a ɗan ƙarami.)

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

idan (errorParsing == NO)
{
NSLog (@ "An aiwatar da XML!");
} da {
NSLog (@ "An sami kuskure a yayin aikin XML");
}

}

Wannan shine aikin karshe da ake buƙatar mu na yau da kullum. Yana kawai ƙare kayan. Za ku sanya kowace lambar da kuke so don kammala aikin a nan ko wani abu na musamman da za ku iya yi a yanayin kuskure.

Ɗaya daga cikin abubuwan da apps da yawa za su iya yi a nan shi ne don adana bayanai da / ko fayil XML zuwa fayil a kan na'urar. Wannan hanya, idan mai amfani ba a haɗa shi da intanet ba a lokacin da za su kaddamar da app, za su iya samun wannan bayani.

Hakika, ba zamu iya mantawa da muhimmin sashi ba: ba da umarni don aika fayil ɗin (kuma ba shi adireshin yanar gizo don gano shi a!).

Don fara tsari, kawai kana buƙatar ƙara wannan lambar code zuwa wuri mai dacewa inda kake son aiwatar da aikin XML:

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