2009-07-06 21 views
18

Bugün Kakao'da basit bir XML ayrıştırıcısının nasıl yapıldığına bakıyorum (masaüstünde). Verileri ayrıştırmak için NSXMLParser kullanmayı düşünüyorum, ancak nereden başlayacağımı tam olarak bilmiyorum. Web'deki XML dosyasının içinde çok fazla veri yok, sadece bir değişkene kaydetmek için ihtiyacım olan birkaç şey içeren basit bir liste. Bunun nasıl yapılacağına dair herhangi bir önerisi var, bununla ilgili çevrimiçi belgeler çok fazla mantıklı değil.Kakaoda XML Ayrıştırma

Yardımlarınız için teşekkürler!

EDIT XML ayrıştırıcısı oluşturmak istememin nedeni, bir sunucudaki MYSQL veritabanından istemci uygulamasına bilgi almaktır. Bunu XML ayrıştırıcısının yanında yapmak için daha iyi bir yol varsa, lütfen bana bildirin! nasıl çalıştığını

+0

Çevrimiçi belgelerde ne anlam ifade etmiyor? – hhafez

+0

Çalıştırmak için neyi geçersiz kılmam gerektiğinden emin değilim. – PF1

+0

Geçersiz kılacak hiçbir şey yok. Ayrı bir nesne yaparsınız ve onu parser delegesini atarsınız. Bu nesnede, ayrıştırıcının ne bulduğunu size söyleyen belirli mesajlara (bazı zorunlu, bazı isteğe bağlı) yanıt verirsiniz. –

cevap

48

aşağıda açıklanmıştır: NSXMLParser adında bir sınıf vardır

bu. XML dosyalarını ayrıştırmak için kullanılır. Ancak, NSXMLParser aptaldır. Tek yapılması gereken, XML ayrıştırmaktır, ancak bulduğu bilgilerle ne yapması gerektiğini bilmez.

Bir temsilci girin. Bir delege bir dadı gibidir. XMLParser'ın bulduğu bilgilerle ne yapacağına dair bir ipucu olmadığı için, her bir şey hakkında delege ve sorar: "Hey! Bir belgeyi ayrıştırmaya başladım! Bir şey yapmam gerekiyor mu?" "Hey! Bazı CDATA buldum! Ne yapmam gerekiyor!" "Hey! Başka bir etiket buldum!" "Hey! Bir kapanış etiketi buldum!", Vb. Bunların hepsi "Hey!" ifadeler temsilci yöntemleridir veya başka bir deyişle, bir temsilci nesnenin uygulamak için seçebileceği isteğe bağlı yöntemlerdir. Genellikle (ancak her zaman değil), NSXMLParser'ı oluşturan nesne de temsilci olur, ancak bu durumda olması gerekmez.

- (void)parserDidStartDocument:(NSXMLParser *)parser { 
    //the parser started this document. what are you going to do? 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { 
    //the parser found an XML tag and is giving you some information about it 
    //what are you going to do? 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
    //the parser found some characters inbetween an opening and closing tag 
    //what are you going to do? 
} 

- (void)parserDidEndDocument:(NSXMLParser *)parser { 
    //the parser finished. what are you going to do? 
} 

bu bir sürü vardır:

NSXMLParser * parser = [[NSXMLParser alloc] initWithContentsOfURL:someURLToAnXMLFile]; 
[parser setDelegate:self]; 
[parser parse]; 
[parser release]; 

Sonra aynı nesneye (öz) 'de, bu yöntemlerden bazıları olabilir:

Yani böyle bir şey olabilir belgelerinde listelenen yöntemler. Sadece NSXMLParser sınıf başvurusuna gidin ve hepsi "Temsilci Yöntemleri" bölümünde listelenir. Bir kez asmak olsun, NSXMLParser kullanımı oldukça kolaydır. Bu, olay odaklı ayrıştırıcı olduğu anlamına gelen SAX Parser'dur. Bir şeyler bulur ve size bunu anlatır.

+0

Teşekkürler Dave: Gerçekten yararlı! Ve gelecek için, veritabanı/istemci iletişimi için XML veya MYSQL kullanmanızı önerir misiniz? – PF1

+3

Muhtemelen ikisini de kullanırdım. Bir istemci-sunucu bağlantısına ihtiyacım varsa ve her iki ucunu da kontrol ettiysem, muhtemelen bir MySQL veritabanında veriyi saklıyorum, sonra XML olarak biçimlendirilmiş uygun verileri dışarı çıkaran bazı PHP betiklerine erişirim (Plist XML özel olarak) NSArray * myArray = [NSArray arrayWithContentsOfURL: urlToMyPHPScript] gibi şeyler yapabilirim;) –

+0

@Dave XML'i nasıl bir PLIST olarak biçimlendirebilirim, bu da bir NSDictionary’i nasıl oluşturabilirim ve bunun gibi bir sıralama yapabilirim? Ayrıca NSXMLParser ile bazı şeyler deniyorum, ve öğe ve bulunan karakterleri ilişkilendirmek için yukarıda gönderdiğiniz komutları kullanarak nasıl öneriyoruz merak ediyorum. Örneğin, "Bazı açıklamalar" öğesinin "Açıklama" öğesinde olduğunu biliyorsunuz. Yardımlarınız için teşekkürler.Plist formatı hakkında fikir edinmek için – PF1