Kumaha Parse Payil XML di Xcode

Hiji tugas basajan anu mangrupa tulang tonggong jeung loba aktip nyaéta kamampuhan pikeun parse file XML. Na, untungna, Xcode ngajadikeun eta rélatif gampang parse hiji file XML di obyektif-C.

Hiji XML file bisa ngandung nanaon da data dasar ngeunaan aplikasi Anjeun ka feed RSS pikeun ramatloka anu. Éta ogé bisa jadi cara agung ngamutahirkeun inpo dina aplikasi Anjeun jarak jauh, sahingga bypassing kudu ngalebetkeun hiji binér anyar pikeun Apple saukur pikeun nambahkeun hiji item anyar pikeun daptar.

Jadi kumaha urang ngolah file XML di Xcode? Prosés ngandung léngkah pikeun initializing variabel bisa dipaké, dimimitian prosés parser XML, nyoco prosés nu hiji payel, mimiti unsur individual, di karakter (nilai) dina unsur, Nepi ka tungtun taun unsur individu, sarta tungtungna ti prosés FITML.

Dina conto ieu, urang bakal jadi FITML file ti Internet ku jalan ngalirkeun eta alamat web tinangtu ( URL ).

Ieu gé mimitian ku gedong kaluar file lulugu. Ieu conto file lulugu pisan dasar pikeun jéntré Témbongkeun controller jeung syarat minimal keur FITML file kami:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;

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

@property (nonatomic, ngaropéa) IBOutlet DetailViewController * detailViewController;

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

Fungsi parseXMLFileAtURL bakal ngamimitian prosés pikeun urang. Nalika eta rengse, anu NSMutableArray "artikel" baris tahan data urang. Asép Sunandar Sunarya bakal diwangun ku kamus mutable kalawan kenop patali ka ngaran lapangan dina file XML.

Ayeuna urang geus nyetél variabel diperlukeun, kami gé ngaléngkah ka papanggih di proses dina file .m:

- (batal) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ "File kapanggih sarta FITML dimimitian");

}

Pungsi ieu ngalir di mimiti prosés. Aya kedah nempatkeun sagala hal di fungsi ieu, tapi lamun hoyong ngalaksanakeun tugas lamun file dimimitian bisa parsed, ieu téh di mana Anjeun bakal nempatkeun kode Anjeun.

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

NSString * agentString = @ "Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-urang) AppleWebKit / 525.27.1 (KHTML, kawas Cakcak) Vérsi / 3.2.1 Safari / 525.27.1";
NSMutableURLRequest * pamundut = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[Pamundut setValue: agentString forHTTPHeaderField: @ "pamaké-Agen"];
xmlFile = [NSURLConnection sendSynchronousRequest: pamundut returningResponse: kasalahan nihil: nihil];


Artikel = [[NSMutableArray alloc] init];
errorParsing = NO;

rssParser = [[NSXMLParser alloc] initWithData: xmlFile];
[RssParser setDelegate: diri];

// Anjeun bisa jadi kudu ngahurungkeun ditambahan ieu dina gumantung kana tipeu berkas XML anjeun FITML
[RssParser setShouldProcessNamespaces: NO];
[RssParser setShouldReportNamespacePrefixes: NO];
[RssParser setShouldResolveExternalEntities: NO];

[RssParser parse];

}

Pungsi ieu instructs mesin pikeun ngundeur file di alamat web tinangtu (URL) tur mimitian proses pikeun FITML eta.

Arurang sangkan pangladén jauh yén urang téh mangrupa Safari ngajalankeun on Mac ngan bisi server nyoba alihan nu iPhone / iPad ka versi seluler.

Pilihan dina tungtungna aya spésifik pikeun file XML tangtu. Paling file RSS jeung payel XML generik moal kudu aranjeunna diaktipkeun.

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

NSString * errorString = [NSString stringWithFormat: @ "kode Kasalahan% abdi", [kode parseError]];
NSLog (@ "Kasalahan FITML XML:% @", errorString);


errorParsing = Sumuhun;
}

Ieu kasalahan-mariksa routing basajan nu bakal nangtukeun hiji nilai binér lamun eta encounters kasalahan. Anjeun bisa jadi kudu hal beuki spésifik didieu gumantung naon anu anjeun lakukeun. Lamun ngan saukur kedah ngajalankeun sababaraha kode sanggeus processing dina kasus kasalahan, variabel binér errorParsing bisa disebut dina waktu éta.

- (batal) parser: (NSXMLParser *) parser didStartElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName atribut: (NSDictionary *) attributeDict {
currentElement = [elementName salinan];
ElementValue = [[NSMutableString alloc] init];
lamun ([elementName isEqualToString: @ "item"]) {
item = [[NSMutableDictionary alloc] init];

}

}

Daging tina parser XML ngandung tilu fungsi, nu saurang ngalir di awal unsur individual, salah nu ngalir dina mangsa tengah FITML unsur, sarta salah sahiji anu ngalir di ahir unsur.

Contona kieu, urang gé bisa FITML file sarupa file RSS nu ngarecah elemen kana grup dina judul tina "barang" dina file XML. Di mimiti ngolah éta, urang téh ngecék nami unsur "item" na allocating kamus item kami nalika grup anyar nu dideteksi. Upami teu kitu, urang initialize variabel kami keur nilai nu.

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

Ieu teh bagian gampang. Lamun urang manggihan karakter, urang ngan saukur nambahan ka variabel kami "ElementValue".

- (batal) parser: (NSXMLParser *) parser didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName {
lamun ([elementName isEqualToString: @ "item"]) {
[Artikel addObject: [item nyalin]];
} Sejenna {
[Item setObject: ElementValue forKey: elementName];
}

}

Lamun urang tos rengse ngolah unsur, urang kedah ngalakukeun salah sahiji dua hal: (1) lamun unsur tungtung téh "item", urang tos rengse group urang, sangkan gé nambahan kamus urang pikeun Asép Sunandar Sunarya kami tina "artikel ".

Atawa (2) lamun unsur henteu "item", urang gé ngeset nilai dina kamus urang ku konci nu cocog ngaran unsur urang. (Hartina urang teu kedah hiji variabel individual pikeun tiap widang dina file XML. Urang bisa ngolah éta saeutik leuwih dinamis.)

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

lamun (errorParsing == NO)
{
NSLog (@ "processing XML rengse!");
} Sejenna {
NSLog (@ "Kasalahan lumangsung salila processing XML");
}

}

Ieu fungsi panungtungan nu diperlukeun pikeun rutin FITML urang. Éta ngan saukur ends dokumen teh. Anjeun bakal nempatkeun sagala kode rék rengse nepi prosés di dieu atawa nanaon husus Anjeun bisa rék ngalakukeun bisi tina kasalahan.

Hiji hal loba aktip bisa rék ngalakukeun dieu nyaeta pikeun nyalametkeun data jeung / atawa file XML ka file dina alat. Cara éta, lamun pamaké henteu nyambung ka Internet di waktu nu sanes aranjeunna muka aplikasi, maranéhanana bisa tetep meunang di informasi ieu.

Tangtu, urang moal bisa poho bagian pangpentingna: sangkan aplikasi Anjeun pikeun parse file (jeung mere eta alamat web pikeun manggihan eta di!).

Pikeun ngamimitian proses, Anjeun saukur butuh pikeun nambahkeun garis ieu kode ka tempat luyu dimana rék ngalakukeun pamrosésan XML:

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