Yerleşik olmasına rağmen XML ayrıştırıcı, yeni bir masaüstü veya mobil uygulamaya gerçek değer katar, bu işlevselliği kodlamak genellikle çok fazla geliştirme süresi ve beta testi gerektirir. Apple'ın Xcode programı, bu manuel çalışmanın çoğunu atlayan bir XML ayrıştırıcı içerir.
bir XML dosyası, uygulamanızla ilgili temel verilerden bir RSS beslemesi bir web sitesi için. Ayrıca, uygulamanızdaki bilgileri uzaktan güncellemenin harika bir yolu olabilirler, böylece yalnızca bir listeye yeni bir öğe eklemek için Apple'a yeni bir ikili dosya gönderme ihtiyacını ortadan kaldırırlar.
Xcode Süreci
Yerleşik Xcode işlemi, kullanılacak değişkenleri başlatmak, XML ayrıştırıcı işlemini başlatmak, bu işleme bir dosya beslemek, tek tek öğeleri ve bu öğeler içindeki karakterleri (değeri) değerlendirmek, tek bir öğenin sonunu tanımak ve ayrıştırmayı sonlandırmak süreç.
XML Ayrıştırıcıyı kullanın
Ayrıntıları göstermek için, belirli bir web adresini ileterek internetten bir örnek dosyayı ayrıştıracağız (URL).
Başlık dosyasını oluşturmaya başlayın. Bu, dosyamızı ayrıştırmak için minimum gereksinimlere sahip bir Ayrıntı Görünümü Denetleyicisi için çok temel bir başlık dosyası örneğidir:
@interface RootViewController: UITableViewController {
DetailViewController *detailViewController;
NSXMLParser *rssParser;
NSMutableArray *makaleler;
NSMutableDictionary *öğesi;
NSString *currentElement;
NSMutableString *ElementValue;
BOOL hatasıAyrıştırma;
}
@property (atomik olmayan, muhafaza) IBOutlet DetailViewController *detailViewController;
- (void) parseXMLFileAtURL:(NSString *)URL;
parseXMLFileAtURL işlevi işlemi başlatır. Bittiğinde, NSMutableArray "makaleleri" verileri tutar. Dizi, XML dosyasındaki alan adlarıyla ilgili anahtarlara sahip değiştirilebilir sözlüklerden oluşur.
Ardından, işlemi başlatın:
- (void) ayrıştırıcıDidStartDocument:(NSXMLParser *)parser{
NSLog(@"Dosya bulundu ve ayrıştırma başladı");
}
Bu fonksiyon işlemin başlangıcında çalışır. Bu fonksiyona herhangi bir şey koymanıza gerek yoktur, ancak dosya ayrıştırılmaya başladığında bir görev yapmak istiyorsanız, kodunuzu buraya koyacaksınız.
Programa Bir Şey İndirmesini Söyleyin
Ardından, programa bir şey indirmesini söyleyin:
- (void) parseXMLFileAtURL:(NSString *)URL
{
NSString *agentString = @"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; tr-tr) AppleWebKit/525.27.1 (KHTML, Gecko gibi) Sürüm/3.2.1 Safari/525.27.1";
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString: URL]];
[istek setValue: agentString forHTTPHeaderField:@"User-Agent"];
xmlFile = [ NSURLConnection sendSynchronousRequest: istek döndürmeResponse: nil error: nil ];
makaleler = [[NSMutableArray alloc] init];
errorAyrıştırma=HAYIR;
rssParser = [[NSXMLParser alloc] initWithData: xmlFile];
[rssParser setDelegate: self];
// Ayrıştırdığınız XML dosyasının türüne bağlı olarak bunlardan bazılarını açmanız gerekebilir.
[rssParser setShouldProcessNamespaces: NO];
[rssParser setShouldReportNamespaceÖnekler: NO];
[rssParser setShouldResolveExternalEntities: NO];
[rssParser ayrıştırma];
}
Bu işlev, motora belirli bir web adresindeki (URL) bir dosya indirmesi ve onu ayrıştırma işlemini başlatması talimatını verir. Uzak sunucuya, sunucunun iPhone/iPad'i bir mobil sürüme yönlendirmeye çalışması durumunda Mac'te çalışan bir Safari olduğumuzu söylüyoruz.
Sondaki seçenekler belirli XML dosyalarına özeldir. Çoğu RSS dosyasının ve genel XML dosyasının açık olmasına gerek yoktur.
Hata-Sonucu Kontrol Edin
Sonuç üzerinde bazı temel hata kontrolleri yapın:
- (void) ayrıştırıcı:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
NSString *errorString = [NSString stringWithFormat:@"Hata kodu %i", [parseError code]];
NSLog(@"XML ayrıştırma hatası: %@", errorString);
errorParsing=EVET;
}Bu hata denetimi yönlendirmesi, bir hatayla karşılaşırsa ikili bir değer ayarlar. Ne yaptığınıza bağlı olarak burada daha spesifik bir şeye ihtiyacınız olabilir. Hata durumunda işlemden sonra sadece bir kod çalıştırmanız gerekirse,
Bu hata denetimi rutini, bir hatayla karşılaşırsa ikili bir değer ayarlar. Ne yaptığınıza bağlı olarak burada daha spesifik bir şeye ihtiyacınız olabilir. Hata durumunda işlemden sonra sadece bir kod çalıştırmanız gerekiyorsa, o sırada ikili değişken ayrıştırma hatası çağrılabilir.
Alınan İçeriği Analiz Edin
Ardından, program alınan içeriği parçalar ve analiz eder:
- (void) ayrıştırıcı:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI nitelikliAd:(NSString *)qName öznitelikleri:(NSDictionary *)attributeDict{
currentElement = [elementName kopyası];
ElementValue = [[NSMutableString alloc] init];
if ([elementName isEqualToString:@"item"]) {
item = [[NSMutableDictionary alloc] init];
}
}
XML ayrıştırıcısının eti, biri bireyin başında çalışan üç işlev içerir. öğe, öğenin ayrıştırılmasının ortasında çalışan ve öğenin sonunda çalışan öğe öğe.
Bu örnekte, öğeleri şu başlık altında gruplara ayıran RSS dosyalarına benzer bir dosyayı ayrıştıracağız. öğeler XML dosyası içinde. İşlemin başlangıcında, "item" eleman adını kontrol ediyoruz ve yeni bir grup tespit edildiğinde madde sözlüğümüzü tahsis ediyoruz. Aksi takdirde, değer için değişkenimizi başlatırız:
- (void) ayrıştırıcı:(NSXMLParser *)ayrıştırıcı bulunduCharacters:(NSString *)string{
[ElementValue appendString: string];
}
Karakterleri bulduğumuzda, onları sadece değişkenimize ekliyoruz. ElementValue:
- (void) ayrıştırıcı:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI nitelikliName:(NSString *)qName{
if ([elementName isEqualToString:@"item"]) {
[makaleler addObject:[öğe kopyası]];
} Başka {
[item setObject: Anahtar için ElementValue: elementName];
}
}
Ayrıştırma Tamamlandığında Ne Olur?
Program bir elemanı işlemeyi bitirdiğinde, iki şeyden birini yapmalıdır:
- bitiş elemanı ise öğe, grubumuzu bitirdik, bu yüzden sözlüğümüzü makale dizimize ekleyeceğiz.
- eleman değilse öğe, sözlüğümüzdeki değeri, öğenin adıyla eşleşen bir anahtarla ayarlayacağız. (Bu, XML dosyasındaki her alan için ayrı bir değişkene ihtiyacımız olmadığı anlamına gelir. Bunları biraz daha dinamik olarak işleyebiliriz.)
Bu, ayrıştırma rutinimiz için gereken son işlevdir; belgeyi bitirir. Herhangi bir son kodu buraya koyun veya bir hata düzeltme alt yordamı belirtin:
- (void) ayrıştırıcıDidEndDocument:(NSXMLParser *)parser {
if (errorParsing == HAYIR)
{
NSLog(@"XML işlemi tamamlandı!");
} Başka {
NSLog(@"XML işlemi sırasında hata oluştu");
}
}
Veriyi sakla
Birçok uygulamanın burada yapmak isteyebileceği şeylerden biri, verileri veya XML dosyasını cihazdaki bir dosyaya kaydetmektir. Bu şekilde, uygulama tekrar yüklendiğinde cihaz internete bağlı değilse, yine de bu bilgilere ulaşabilir.
Tabii ki, en önemli kısmı unutamayız: uygulamanıza dosyayı ayrıştırmasını söylemek (ve onu bulması için bir web adresi vermek!). İşlemi başlatmak için, bu kod satırını XML işlemeyi yapmak istediğiniz uygun yere ekleyin:
[self parseXMLFileAtURL:@" http://www.webaddress.com/file.xml"];