Cara Nguripake XML File ing Xcode

Siji tugas prasaja sing minangka backbone kanggo akeh aplikasi yaiku kemampuan ngubrol file XML. Lan, untung wae, Xcode ndadekake gampang ngetung file XML ing Objective-C.

File XML bisa ngemot apa-apa saka dhasar data babagan app menyang feed RSS kanggo situs web. Iku uga bisa dadi cara sing apik kanggo nganyari informasi ing app sampeyan kanthi jarak jauh, saéngga ngliwati kudu ngirim binary anyar menyang Apple mung nambah item anyar menyang daftar.

Proses iki ngandhut langkah-langkah kanggo nginisialisasi variabel sing bakal digunakake, miwiti proses parser XML, nyiapake proses file file, wiwitan elemen individu, karakter (nilai) ing elemen, pungkasane unsur individu, lan pungkasan proses parsing.

Ing conto iki, kita bakal ngresiki file saka Internet kanthi ngliwati alamat web tartamtu ( URL ).

Kita bakal miwiti kanthi mbangun file header. Iki minangka conto file header dhasar kanggo Detail View Controller karo syarat minimal kanggo ngetrapake file kita:

@interface RootViewController: UITableViewController {
DetailViewController * detailViewController;

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

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

- (ora sah) parseXMLFileAtURL: (NSString *) URL;

Fungsi parseXMLFileAtURL bakal miwiti proses kanggo kita. Nalika rampung, artikel "NSMutableArray" bakal nyekel data kita. Arrayan bakal digawe nganggo kamus sing bisa diganti karo tombol sing ana hubungane karo jeneng lapangan ing file XML.

Saiki kita wis nyetel variabel sing dibutuhake, kita bakal pindhah menyang proses ketemu ing file .m:

- (ora sah) parserDidStartDocument: (NSXMLParser *) parser {
NSLog (@ "Berkas ditemokake lan diwenehake");

}

Fungsi iki dumadi ing wiwitan proses. Ora perlu dilebokake apa-apa sajrone fungsi iki, nanging yen sampeyan pengin ngerjakake tugas nalika file diwiwiti, panjene sampeyan bakal nemtokake kode sampeyan.

- (ora sah) parseXMLFileAtURL: (NSString *) URL
{

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


artikel = [[NSMutableArray]]];
errorParsing = NO;

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

// Sampeyan bisa uga kudu nguripake sawetara iki gumantung saka jinis file XML sing sampeyan parsing
[rssParser setShouldProcessNamespaces: NO];
[rssParser setShouldReportNamespacePrefixes: NO];
[rssParser setBarengResolveExternalEntities: NO];

[rssParser parse];

}

Fungsi iki instructs engine kanggo ngundhuh file ing alamat web tartamtu (URL) lan miwiti proses kanggo parsing.

Kita lagi nyeritakake server remot sing kita Safari mlaku ing Mac mung ing kasus server nyoba kanggo pangalihan iPhone / iPad menyang versi seluler.

Pilihan ing pungkasan tartamtu kanggo file XML tartamtu. Paling file RSS lan file XML umum ora perlu diaktifake.

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

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


errorParsing = YES;
}

Iki minangka routing error-checking prasaja sing bakal nyetel nilai binar yen nemokke kesalahan. Sampeyan mbutuhake soko luwih spesifik ing kene gumantung apa sing sampeyan tindakake. Yen sampeyan mung perlu nglakoni sawetara kode sawise diproses ing kasus kesalahan, variabel biner errorParsing bisa kasebut ing wektu kasebut.

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

}

}

Daging saka parser XML ngandhut telung fungsi, siji sing mlaku ing awal unsur individu, siji sing mlaku ing tengah parsing unsur, lan siji sing mlaku ing mburi elemen.

Contone, kita bakal ngelompokake file sing meh padha karo file RSS sing ngecor elemen dadi kelompok miturut judul "item" ing file XML. Ing wiwitan pangolahan, kita mriksa jeneng unsur "item" lan nemtokake kamus item nalika klompok anyar dideteksi. Yen ora, kita nginisake variabel kita kanggo nilai kasebut.

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

Iki minangka bagean sing gampang. Nalika kita nemokake karakter, kita mung nambahake menyang variabel "ElementValue".

(nSString *) parser didEndElement: (NSString *) elementName namespaceURI: (NSString *) namespaceURI qualifiedName: (NSString *) qName {
yen ([elementName isEqualToString: @ "item"]) {
[artikel addObject: salinan barang]];
} else {
[item setObject: ElementValue forKey: elementName];
}

}

Yen wis rampung ngolah elemen, kita kudu nggawe salah siji saka rong perkara: (1) yen unsur pungkasan iku "item", wis rampung grup kita, supaya kita bakal nambah kamus kita dadi array "artikel ".

Utawa (2) yen unsur kasebut ora "item", kita bakal nyetel angka ing kamus kita kanthi kunci sing cocog karo jeneng unsur. (Iki tegese kita ora butuh variabel individu kanggo saben lapangan ing file XML.) Kita bisa ngolah maneh sing luwih dynamik.)

- (ora sah) parserDidEndDocument: (NSXMLParser *) parser {

yen (errorParsing == NO)
{
NSLog (@ "Pangolahan XML rampung!");
} else {
NSLog (@ "Kesalahan nalika pangolahan XML");
}

}

Iki minangka fungsi pungkasan sing dibutuhake kanggo rutin parsing kita. Sampeyan mung nutup dokumen. Sampeyan bakal sijine kode apa wae sing pengin rampung proses kasebut ing kene utawa apa wae khusus sing sampeyan pengin dilakoni nalika kesalahan.

Siji bab akeh aplikasi sing pengin dilakoni ing kene yaiku kanggo nyimpen data lan / utawa file XML menyang file ing piranti kasebut. Mangkono, manawa pangguna ora nyambung menyang Internet ing wektu sabanjure padha mbukak app, padha isih bisa njaluk informasi iki.

Mesthi, kita ora bisa lali babagan sing paling penting: nyatakake aplikasi kanggo ngurai file kasebut (lan menehi alamat web kanggo nggoleki!).

Kanggo miwiti proses, sampeyan mung perlu nambah baris kode iki menyang panggonan sing cocok kanggo proses XML:

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