2012-05-29 14 views
7

Bu, libxml ayrıştırma kullanarak ayrıştırmak istediğim bir xml yapısıdır. libxml ayrıştırma kullanılarak xml verilerinin ayrıştırılması

enter image description here

enter image description here

Nasıl kimliği yani ve url ve boyutu yani "görüntü" etiketi için "kampanyası" etiketi için öznitelik değerini elde edebilirsiniz.

Bu değerleri kullanırsam, "code" etiketi ve "name" etiketinin değerlerini ayıklayabilirim.

static const char *kName_campaign = "campaign"; 
static const NSUInteger kLength_campaign = 9; 
static const char *kName_code = "code"; 
static const NSUInteger kLength_code = 5; 
static const char *kName_name = "name"; 
static const NSUInteger kLength_name = 5; 

Sonra hep birlikte mevcut ve gelecek kampanyanın kodu ve adını almak. Bu, ayrıştırma yapılırken çağrılan temsilci içinde kullandığım koddur.

static void endElementSAX(void *ctx, const xmlChar *localname, const xmlChar *prefix, const xmlChar *URI) 
{  
    LibXMLParser *parser = (LibXMLParser *)ctx; 

    if (parser.parsingASong == NO) return; 

    if (prefix == NULL) 
    { 
     if (!strncmp((const char *)localname, kName_campaign, kLength_campaign)) 
     { 
      [parser finishedCurrentSong]; 
      parser.parsingASong = NO; 
     } 
     else if (!strncmp((const char *)localname, kName_code, kLength_code)) 
     { 
      parser.currentSong.title = [parser currentString]; 
      NSLog(@"Code :: %@",[parser currentString]); 
     } 
     else if (!strncmp((const char *)localname, kName_name, kLength_name)) 
     { 
      parser.currentSong.category = [parser currentString]; 
      NSLog(@"Name :: %@",[parser currentString]); 
     } 
    } 
} 

Nasıl baştan "kampanyası" etiketinden id altına nitelikleri değerler elde edebilirsiniz. url ve boyut "image" etiketinden mi?

+0

Gerçekten teşekkürler. – NiKKi

+0

İlgi çekici neden, niçin 'NSXMLParser' kullanmıyorsunuz? –

+0

Cuz daha hızlı ve hafıza dostu ... – NiKKi

cevap

6
static void startElementSAX(void *ctx, const xmlChar *localname, const xmlChar *prefix, const xmlChar *URI, int nb_namespaces, const xmlChar **namespaces, int nb_attributes, 
int nb_defaulted, const xmlChar **attributes) 
{ 

if (nb_attributes > 0) 
{ 
    NSMutableDictionary* attributeDict = [NSMutableDictionary dictionaryWithCapacity:(NSUInteger)[NSNumber numberWithInt:nb_attributes]]; 
    for (int i=0; i<nb_attributes; i++) 
    { 
     NSString* key = [NSString stringWithCString:(const char*)attributes[0] encoding:NSUTF8StringEncoding]; 
     NSString* val = [[NSString alloc] initWithBytes:(const void*)attributes[3] length:(attributes[4] - attributes[3]) encoding:NSUTF8StringEncoding]; 
     attributes += 5; 

     [attributeDict setValue:val forKey:key]; 
    } 
} 
} 

bu deneyin .. o Mat için