2012-05-29 47 views
7

Đây là cấu trúc xml mà tôi muốn phân tích bằng cách sử dụng phân tích cú pháp libxml.cách phân tích dữ liệu xml bằng cách sử dụng phân tích cú pháp libxml

enter image description here

enter image description here

Làm thế nào tôi có thể nhận được giá trị thuộc tính cho thẻ "chiến dịch" tức là ID và cho "hình ảnh" tag tức là urlkích thước.

Nếu tôi sử dụng các giá trị này, tôi có thể trích xuất các giá trị của thẻ "mã" và thẻ "tên".

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; 

Sau đó, tôi lấy mã và tên của chiến dịch hiện tại và sắp tới cùng nhau. Đây là mã tôi sử dụng trong ủy nhiệm được gọi khi phân tích xong.

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]); 
     } 
    } 
} 

Làm thế nào tôi có thể nhận được các giá trị thuộc tính từ đầu đến đáy id từ thẻ "chiến dịch". urlkích thước từ thẻ "hình ảnh"?

+0

thực sự thanx cho Mat đó. – NiKKi

+0

Không quan tâm, tại sao bạn không sử dụng 'NSXMLParser'? –

+0

Cuz nó nhanh hơn và bộ nhớ thân thiện ... – NiKKi

Trả lời

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]; 
    } 
} 
} 

Hãy thử điều này ..

Các vấn đề liên quan