Meskipun built-in XML parser menambahkan nilai nyata ke desktop atau aplikasi seluler baru, pengkodean fungsionalitas itu biasanya membutuhkan banyak waktu pengembangan dan pengujian beta. Program Xcode Apple menyertakan pengurai XML yang melewati sebagian besar pekerjaan manual ini.
Sebuah XML file dapat berisi apa saja, mulai dari data dasar tentang aplikasi Anda hingga umpan RSS untuk sebuah situs web. Mereka juga bisa menjadi cara yang bagus untuk memperbarui informasi dalam aplikasi Anda dari jarak jauh, sehingga mengabaikan kebutuhan untuk mengirimkan biner baru ke Apple hanya untuk menambahkan item baru ke daftar.
Proses Xcode
Proses Xcode bawaan berisi langkah-langkah untuk menginisialisasi variabel yang akan digunakan, memulai proses parser XML, memasukkan proses tersebut ke file, menilai elemen individu dan karakter (nilai) di dalam elemen tersebut, mengenali akhir elemen individu, dan mengakhiri penguraian proses.
Gunakan XML Parser
Untuk mengilustrasikan detailnya, kami akan menguraikan file contoh dari internet dengan mengirimkannya ke alamat web tertentu (URL).
Mulailah dengan membangun file header. Ini adalah contoh file header yang sangat mendasar untuk Detail View Controller dengan persyaratan minimum untuk mengurai file kita:
@interface RootViewController: UITableViewController {
DetailViewController *detailViewController;
NSXMLParser *rssParser;
NSMutableArray *artikel;
NSMutableDictionary *item;
NSString *elemen saat ini;
NSMutableString *ElementValue;
BOOL errorParsing;
}
@property (nonatomik, pertahankan) IBOutlet DetailViewController *detailViewController;
- (void) parseXMLFileAtURL:(NSString *)URL;
Fungsi parseXMLFileAtURL memulai proses. Setelah selesai, "artikel" NSMutableArray menyimpan data. Array terdiri dari kamus yang dapat diubah dengan kunci yang terkait dengan nama bidang dalam file XML.
Selanjutnya, inisialisasi proses:
- (void) parserDidStartDocument:(NSXMLParser *)parser{
NSLog(@"File ditemukan dan penguraian dimulai");
}
Fungsi ini berjalan pada awal proses. Tidak perlu memasukkan apa pun ke dalam fungsi ini, tetapi jika Anda ingin melakukan tugas saat file mulai diurai, di sinilah Anda akan meletakkan kode Anda.
Instruksikan Program untuk Mengunduh Sesuatu
Selanjutnya, instruksikan program untuk mengunduh sesuatu:
- (void) parseXMLFileAtURL:(NSString *)URL
{
NSString *agentString = @"Mozilla/5.0 (Macintosh; kamu; Intel Mac OS X 10_5_6; id-us) AppleWebKit/525.27.1 (KHTML, seperti Gecko) Versi/3.2.1 Safari/525.27.1";
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[request setValue: agentString forHTTPHeaderField:@"User-Agent"];
xmlFile = [ NSURLConnection sendSynchronousRequest: permintaan pengembalianResponse: nil error: nil ];
artikel = [[NSMutableArray alloc] init];
errorParsing=TIDAK;
rssParser = [[NSXMLParser alloc] initWithData: xmlFile];
[rssParser setDelegate: self];
// Anda mungkin perlu mengaktifkan beberapa ini tergantung pada jenis file XML yang Anda parsing
[rssParser setShouldProcessNamespaces: NO];
[rssParser setShouldReportNamespacePrefixes: NO];
[rssParser setShouldResolveExternalEntities: NO];
[parse rssParser];
}
Fungsi ini menginstruksikan mesin untuk mengunduh file di alamat web (URL) tertentu dan memulai proses untuk menguraikannya. Kami memberi tahu server jarak jauh bahwa kami adalah Safari yang berjalan di Mac untuk berjaga-jaga jika server mencoba mengarahkan iPhone/iPad ke versi seluler.
Opsi di bagian akhir khusus untuk file XML tertentu. Sebagian besar file RSS dan file XML generik tidak perlu diaktifkan.
Kesalahan-Periksa Hasilnya
Lakukan beberapa pemeriksaan kesalahan dasar pada hasilnya:
- (void) parser:(NSXMLParser *)parser parseErrorTerjadi:(NSError *)parseError {
NSString *errorString = [NSString stringWithFormat:@"Kode kesalahan %i", [kode parseError]];
NSLog(@"Kesalahan mengurai XML: %@", errorString);
errorParsing=YA;
}Perutean pemeriksaan kesalahan ini menetapkan nilai biner jika menemukan kesalahan. Anda mungkin memerlukan sesuatu yang lebih spesifik di sini tergantung pada apa yang Anda lakukan. Jika Anda hanya perlu menjalankan beberapa kode setelah pemrosesan jika terjadi kesalahan,
Rutin pemeriksaan kesalahan ini menetapkan nilai biner jika menemukan kesalahan. Anda mungkin memerlukan sesuatu yang lebih spesifik di sini tergantung pada apa yang Anda lakukan. Jika Anda hanya perlu menjalankan beberapa kode setelah pemrosesan jika terjadi kesalahan, variabel biner penguraian kesalahan dapat dipanggil pada saat itu.
Analisis Konten yang Diambil
Selanjutnya, program memecah konten yang diambil dan menganalisisnya:
- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI memenuhi syaratName:(NSString *)qName atribut:(NSDictionary *)attributeDict{
currentElement = [salinan namaelemen];
ElementValue = [[NSMutableString alloc] init];
if ([elementName isEqualToString:@"item"]) {
item = [[NSMutableDictionary alloc] init];
}
}
Daging parser XML berisi tiga fungsi, yang berjalan di awal individu elemen, yang berjalan di tengah penguraian elemen, dan yang berjalan di akhir at elemen.
Untuk contoh ini, kami akan mengurai file yang mirip dengan file RSS yang memecah elemen ke dalam grup di bawah judul item dalam file XML. Pada awal pemrosesan, kami memeriksa nama elemen "item" dan mengalokasikan kamus item kami ketika grup baru terdeteksi. Jika tidak, kami menginisialisasi variabel kami untuk nilai:
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
[ElementValue appendString: string];
}
Ketika kami menemukan karakter, kami hanya menambahkannya ke variabel kami ElemenNilai:
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURIqualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"item"]) {
[artikel addObject:[item copy]];
} lain {
[item setObject: ElementValue forKey: elementName];
}
}
Apa Yang Terjadi Saat Parsing Selesai
Ketika program selesai memproses elemen, ia harus melakukan salah satu dari dua hal:
- Jika elemen akhirnya adalah barang, kami telah menyelesaikan grup kami, jadi kami akan menambahkan kamus kami ke array artikel kami.
- Jika elemen tidak barang, kami akan menetapkan nilai dalam kamus kami dengan kunci yang cocok dengan nama elemen. (Ini berarti kita tidak memerlukan variabel individual untuk setiap bidang dalam file XML. Kami dapat memprosesnya sedikit lebih dinamis.)
Ini adalah fungsi terakhir yang diperlukan untuk rutinitas penguraian kita; itu mengakhiri dokumen. Letakkan kode akhir apa pun di sini atau tentukan subrutin koreksi kesalahan:
- (void) parserDidEndDocument:(NSXMLParser *)parser {
jika (errorParsing == TIDAK)
{
NSLog(@"Pemrosesan XML selesai!");
} lain {
NSLog(@"Terjadi kesalahan selama pemrosesan XML");
}
}
Simpan Datanya
Satu hal yang mungkin ingin dilakukan banyak aplikasi di sini adalah menyimpan data atau file XML ke file di perangkat. Dengan begitu, jika perangkat tidak terhubung ke internet saat aplikasi dimuat lagi, perangkat masih bisa mendapatkan informasi ini.
Tentu saja, kami tidak dapat melupakan bagian terpenting: memberi tahu aplikasi Anda untuk mengurai file (dan memberikan alamat web untuk menemukannya!). Untuk memulai proses, tambahkan baris kode ini ke tempat yang sesuai di mana Anda ingin melakukan pemrosesan XML:
[self parseXMLFileAtURL:@" http://www.webaddress.com/file.xml"];