2012-05-29 26 views
7

これはlibxml解析を使用して解析したいxml構造体です。 libxml解析を使用してxmlデータを解析する方法

enter image description here

enter image description here

にはどうすれば IDすなわちと URLサイズすなわち "画像" タグの "キャンペーン" タグの属性値を取得することができます。

これらの値を使用すると、「code」タグと「name」タグの値を抽出できます。

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; 

次に、現在と今後のキャンペーンのコードと名前をまとめて取得します。 これは、解析が完了したときに呼び出されるデリゲートで使用するコードです。

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

は、どのように私は最初から「キャンペーン」タグからIDの下に属性値を取得することができます。 urlおよびサイズ「image」タグからですか?

+0

本当にありがとうのを試してみてください。 – NiKKi

+0

興味のないところで、なぜあなたはNSXMLParserを使用していませんか? –

+0

それは速く、メモリにやさしいです... – NiKKi

答えて

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

そのマットのために、この..

関連する問題