Çawa pelên XML Xencê di Xcode de

Karmendiyek hêsan e ku gelek hûrsên pişta paşîn e ku ew pelên XML parse dike. Û bi kêfxweşî, Xcode di pelê-X-a-a-a-pelê de parçeyek hêsantir dike.

Fîlmek XML dikare ji bo malpera bingehîn ya we ji RSS-ê ji bo malpera tiştek bingehîn heye. Ew dikarin riya herî mezin ya agahdariya di nav malê xwe de rêve bikin, bi vî awayî hewceyê hewceyê ku ji bo lîsteya nû ya nû binivîse hewceya nû binaryî.

Ji ber ku em pêvajoyên XML di Xcode de pêvajoyê dikin? Vê pêvajoyê ji bo pêkanîna guherînên guherînên XML-ê, dest pê dike ku pêvajoyek pelê, destpêka yekem, celeb (nirx) di nav elementê de, dawiya yekemek hêsan, û dawiya pêvajoya parsingê.

Di vê nimûneyê de, em ê pelê ji Înternetê ve tête navnîşana navnîşana malpera ( URL ) derbas dibe.

Em ê bi pelê pelê avakirina dest pê bikin. Ev nimûne ya pelê serekî ya bingehîn ji bo Pêşniyarên Detektorî ya ku bi pelê herî kêm ji bo pelê me veşartî ye:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;

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

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

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

Parîs XXFileAtURL dê fonksiyonê ji me re pêvajoya dest pê dike. Dema ku ew bi dawî bibe, NSMutableArray "gotarên" dê di daneyên me de bimîne. Vê pelê ji hêla navên zeviyê di pelê XML de bi bişkojkên mutengelek ve têne çêkirin.

Niha ku em hewceyê guherînên cûrbekirî, em ê li ser pêvajoyê di pelê .m:

- (void) parserDidStartDocument: ((NSXMLParser *) parser {
NSLog (@ "Wêne dît û pelê dest pê kir");

}

Ev fonksiyonê di destpêka pêvajoyê de dike. Pêdivî ye ku tu tiştek di vê fonksiyonê de tiştek bikî, lê hûn dixwazin ku karê karê xwe bidin dema ku pelê veguhestin, ew e ku hûn ê kodê xwe bişînin.

- (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, mîna Gecko) Version / 3.2.1 Safari / 525.27.1";
NSMutableURL Daxuyaniya * daxwaz = [NSMutableURL Daxwaza daxwaznameyêWithURL:
[NSURL URLWithString: URL]];
[daxwaza rûniştinê: AgahdarString ji boHTTPHeaderField: @ "Bikarhêner-Agent"];
xmlFile = [NSURLConnivîsê bişîne SendSynchronousRebest: Vegere daxwaza Serdanînê: Xeletiyek nil: nil];


articles = [[NSMutableArray alloc] init];
errorParsing = Na;

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

// Pêdivî ye ku hûn hewce ne ji van van tiştan li ser pêvajoya xmlê pelê ku hûn parsing in
[rssParser setShouldProcessNamespaces: NO];
[rssParser setShouldReportNamespacePrefixes: NO];
[rssParser setShouldResolveExternalEntities: NO];

[rssParser parse];

}

Ev fonksiyonê înternetê dide ku da ku pelê pelê bi taybetî li navnîşana malperê (URL) bikî û pêvajoyê ji bo parsingkirinê dest pê bikin.

Em serverê dûr bêjin ku em Safari di MAC-ê de tenê di dema ku server hewl dide IPHONE / iPad ji bo guhertoyek mobîl.

Hilbijêre li dawiyê ji bo hin pelên XML taybetî hene. Gelek RSS û pelên gelemperî yên pelên XML dê hewce ne.

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

NSString * errorString = [NSString stringWithFormat: @ "Koda çewtiyê% i", [parseError code]];
NSLog (@ "Çewtiya XML parsing:% @", errorString);


errorParsing = YES;
}

Ev çewtiyek pir hêsan e-rêvegirtina kontrolkirinê ye ku dê heke çewtiyek binirxîne eger ew çewtiyek dorîn. Hûn dikarin çi bikin ku hûn li ser vê yekê bêtir hewce ye. Heke hûn bi tenê hewce bike ku çend kodê piştî pêvajoya çewtiyê de bisekinin, çewtî Parsing binary variable dikare di vê demê de tê gotin.

(NSString *) qeydkirî: (NSDictionary *) taybetmendî {nSDictionary *} taybetmendî {NSString *} navekî navnîşên navnîşan (NSString *) qeydkirî (NSString *) elementNameName (NSString *) elementname {NSXMLParser *) parser
currentElement = [elementName kopî];
ElementValue = [[Hemû Nîşe NumutableStocring] init];
heke ([elementName isEqualToString: @ "item"])) {
item = [[NSMutableDictionary anus] init];

}

}

Xweserê XML parserê sê fonksiyonê hene, yek di destpêkê de yekîneyên yekbûyî, yek e ku di dema di naviya parsingê de ye û yek di dawiya elementê de digerin.

Ji bo vê nimûne, em ê pelê wekî pelên RSS ên ku pelên hêja "lîstikên" di hundirê pelê XML de têkevine bin. Di destpêka pêvajoyê de, em ji bo navê "element" re kontrol dikin û gava ku komên nû ve tê dîtin. Wekî din, em ji bo nirxa me ya hevkariyê dest pê dike.

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

Ev beşek hêsan e. Dema ku em xemgîn binêrin, em bi wan re bi xwe veguherînin "ElementValue".

- ((noid) parser: (NSXMLParser *) parser didEndElement: ((NSString *) elementName namepaceURI: (NSString *) navnîşên navnîşîName: (NSString *) qName {
heke ([elementName isEqualToString: @ "item"])) {
[articles addObject: [item copy]];
} else {
[item setObject: ElementValue forKey: elementName];
}

}

Dema ku em pêvajoyek pêvajoyek derxistin, em hewceyê yek ji du tiştan bikin: (1) eger heke endame "item" e, em koma me temam kir, da ku em ê di meha xwe de " ".

An jî (2) heger element ne "tişt" e, em ê di nav me de ku bi navê wê elementê bi hev re digel mêjûya xwe bidin. (Ev tê wateya ku em pêdivî ye ku ji bo her qadê di nava XML-ê deverek pêdivî ye.

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

heke (errorParsing == NO)
{
NSLog (@ "XML pêvajoya çêkirin!");
} else {
NSLog (@ "dema XML pêvajoyê de çewtiyek çêbû");
}

}

Ev fonksiyona dawîn e ku ji bo merivkirina parsiyonê mecbûr e. Ew bi belge belge dike. Hûn kodê ku hûn dixwazin pêvajoyek li vir bikin an jî tiştek taybet be ku hûn dixwazin di rewşê çewtiyê de bikin.

Her tişt dikare çend-ê-bihêle ku hûn dixwazin li vir bikin, ew e ku pel û / an jî pelê XML bi pelê li ser cîhaza xwe biparêze. Bi vî awayî, heger ew bikarhêner an înternetê ne girêdayî ye ku paşê dema ku ew hilbijêre, ew dikarin bi vî awayî agahdar bibin.

Bê guman, em nikarin parçeyek herî girîng ji bîr nekin: Serlêdana te bistînin ku pelê paras bikin (û navnîşa webê bide ku lê bigirin!).

Ji bo pêvajoyê dest pê dike, hûn hewce ne ku hûn vê rêza koda kodê li cîhê cîhê ku hûn dixwazin dixwazin XML pêvajoyê bikin:

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