Ahoana ny fomba famandrihana XML rakitra ao amin'ny Xcode

Asa iray tsotra izay ny mpanamboatra fitaovana ho an'ny fampiasa maro dia ny fahafahana manadihady ny rakitra XML. Ary, sambatra kokoa, Xcode dia mampandeha mora kokoa ny manadihady rakitra XML ao amin'ny Objective-C.

Ny rakitra XML dia mety ahitana zavatra avy amin'ny antontan-kevitra fototra momba ny fampiharana amin'ny fehezanteny RSS ho an'ny tranonkala iray. Azony atao ihany koa ny fomba tsara ahafahana manavao ny fampahalalana ao anatinao amin'ny alàlan'ny fitsaboana, ka manadino ny filàna ny hametraka kitendry vaovao ho an'i Apple fotsiny mba hanampiana singa vaovao amin'ny lisitra iray.

Ahoana no fomba handaminana ireo XML rakitra ao amin'ny Xcode? Ny dingana dia ahitana dingana amin'ny fanombohana ny variable ampiasaina, manomboka ny dingan'ny parser XML, mamelona izany dingana izany, ny fanombohan'ny singa tsirairay, ny tarehintsoratra (lanjany) ao amin'ny singa, ny fiafaran'ny singa tsirairay, ary ny fiafaran'ny fizotry ny fizarana.

Amin'ny alalan'ity ohatra ity, dia hanaparitaka antontan-taratasy avy amin'ny aterineto isika amin'ny alalan'ny fandehanana adiresy ( URL ) manokana.

Hanomboka amin'ny fananganana ny tahirin-tsokajy. Ohatra iray amin'ny tahiry lohan-drakitra tena manan-danja ho an'ny View View Controller miaraka amin'ny fepetra farafahakeliny amin'ny famakafakana ny rakitra:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;

NSXMLParser * rssParser;
NSMutableArray * articles;
NSMutableDictionary * item;
NSString * currentElement;
NSMutableString * ElementValue;
BOOL errorParsing;
}

@property (tsy atomika, mitazona) IBOutlet DetailViewController * detailViewController;

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

Ny fonosana parseXMLFileAtURL dia hanomboka ny dingana ho antsika. Rehefa vita izany, ny lahatsoratra "NSMutableArray" dia hitazona ny angon-tsaintsika. Ny rakitra dia misy rakibolana miafina miaraka amin'ny fanalahidy mifandraika amin'ny anaran'ny saha ao amin'ny tahiry XML.

Amin'izao isika no nanangana ny fari-pandaharana nilaina, dia hifindra amin'ny fihaonana amin'ny dingana ao amin'ny .m:

- (void) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ "Nahitana ny rakitra sy ny fanadihadiana");

}

Ity asa ity dia mandeha eo am-piandohan'ny dingana. Tsy ilaina ny mametraka na inona na inona amin'io asa io, fa raha te hanatanteraka asa ianao rehefa manomboka mametraka ny rakitra, dia izao no hametrahanao ny code.

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

NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit / 525.27.1 (KHTML, toa Gecko) Version / 3.2.1 Safari / 525.27.1";
NSMutableURLRequest * fangatahana = [NSMutableURLRequest fangatahanaWithURL:
[NSURL URLWithString: URL]];
[ask setValue: agentString forHTTPHeaderField: @ "User-Agent"];
xmlFile = [NSURLConnection sendSynchronousRequest: fangatahana niverinaResponse: nil error: nil];


article = [[NSMutableArray nalaina] init];
errorParsing = NO;

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

// Mety mila mamadika ny sasany amin'ireto ianao arakaraka ny karazan-drakitra XML izay apetanao
[rssParser setShouldProcessNamespaces: NO];
[rssParser setShouldReportNamespacePrefixes: NO];
[rssParser setShouldResolveExternalEntities: NO];

[rssParser parse];

}

Ity asa ity dia manoro ny motera handefa ny antontan-taratasy ao amin'ny adiresy Internet (URL) ary hanombohana ny fizotran'ny fanadihadiana.

Milaza amintsika ny mpanolotra serivisy fa Safari mihazakazaka eo amin'ny Mac raha toa ka manandrana manitsy ny iPhone / iPad amin'ny serivisy finday ny seriver.

Ny safidy amin'ny farany dia manokana ny rakitra XML sasany. Ny ankamaroan'ny rakitra RSS sy ny rakitra XML dia tsy mila mandefa azy ireo.

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

NSString * errorString = [NSString stringWithFormat: @ "Kode diso% i", [parseError code]];
NSLog (@ "Error parsing XML:% @", errorString);


errorParsing = ENY;
}

Ity dia fialan-tsasatra tsotra fandinihana izay hametraka sanda amidy raha miteraka fahadisoana izany. Mety mila zavatra hafa kokoa ianao, arakaraka ny zavatra ataonao. Raha mila mampiasa fehezan-dalàna kely fotsiny ianao rehefa tratranao amin'ny tranga misy diso, dia azo atao ny miantso ny fari-piraketan'ny errorParsing amin'ny fotoana.

- (void) parser: (NSXMLParser *) parser didStartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName attributes: (NSDictionary *) attributeDict {
currentElement = [elementName copy];
ElementValue = [[NSMutableString nalaina] init];
raha [elementName isEqualToString: @ "item"]) {
item = [[NSMutableDictionary alloc] init];

}

}

Ny hena amin'ny parser XML dia misy karazany telo, iray izay mihazakazaka eo am-piandohan'ny singa tsirairay, iray izay mihazakazaka eo afovoan'ny famaranana ny singa, ary iray izay mihodina amin'ny faran'ny singa.

Ho an'ity ohatra ity dia hanaparitaka tahiry mitovy amin'ny rakitra RSS izay mamotika singa ao anaty vondrona eo ambanin'ny lohahevitra "zavatra" ao anatin'ny rakitra XML. Amin'ny fanombohana ny fanodinana, dia manamarina ny anarana hoe "item" isika ary manome ny rakibolana entin'ny finday rehefa fantatry ny vondrona vaovao. Raha tsy izany dia manomboka manova ny fari-tsaintsika izahay.

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

Ity no ampahany mora. Rehefa mahita olon-tiana isika dia ampidirintsika fotsiny amin'ny "VariableValue".

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

}

Rehefa vita ny fanodinana singa iray, dia mila manao zavatra iray isika: (1) raha ny "endriky" ny endriky ny endriky dia efa vitantsika ny vondrona misy antsika, ka hampidirintsika amin'ny diantsika ny rakibolana ".

Na (2) raha tsy "item" ilay singa, dia hametraka ny sandan'ny diksionera miaraka amin'ny fanalahidy izay mifanandrify amin'ny anarana. (Midika izany fa tsy mila fari-piainan'ny tsirairay isika ao amin'ny rakitra XML. Azontsika atao ny manova azy ireo bebe kokoa.)

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

raha (errorParsing == TSY)
{
NSLog (@ "fanovana XML!");
} else {
NSLog (@ "Nisy ny tranga nitranga nandritra ny fanodinana XML");
}

}

Ity no farany farany ilaina ho an'ny fanandramana fanadihadiana. Vita fotsiny ilay rakitra. Hametraka fehezan-teny tianao hampitsaharana ny dingana eto na zavatra manokana tianao hatao amin'ny tranga diso.

Zavatra iray maro mety ho tadiavina atao eto dia ny mamonjy ny rakitra sy / na ny rakitra XML amin'ny rakitra iray ao amin'ny fitaovana. Amin'izany, raha tsy mifandray amin'ny Internet ny mpampiasa amin'ny fotoana manaraka dia ampidirin'izy ireo ny fampiharana, dia mbola afaka mahazo izany fampahalalana izany izy ireo.

Mazava ho azy, tsy azontsika adino ny ampahany manan-danja indrindra: milaza ny fangatahanao hizarana ny rakitra (ary manome azy adiresy tranonkala iray ahafahana mahita izany!).

Mba hanombohana ny dingana, ilainao fotsiny ny mampiditra ity tsipika ity mankany amin'ny toerana mety izay tianao hatao ny fanodinana XML:

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