Iphone 如何使用libxml解析解析xml数据

Iphone 如何使用libxml解析解析xml数据,iphone,ios,Iphone,Ios,这是一个xml结构,我想使用libxml解析来解析它 如何获取“活动”标签(即ID和“图像”标签(即url和大小)的属性值 如果我使用这些值,我可以提取“code”标记和“name”标记的值 然后我得到了当前和即将进行的活动的代码和名称。 这是我在委托中使用的代码,在完成解析时调用该委托 static void endElementSAX(void *ctx, const xmlChar *localname, const xmlChar *prefix, const xmlChar *UR

这是一个xml结构,我想使用libxml解析来解析它

如何获取“活动”标签(即ID和“图像”标签(即url大小)的属性值

如果我使用这些值,我可以提取“code”标记和“name”标记的值

然后我得到了当前和即将进行的活动的代码和名称。 这是我在委托中使用的代码,在完成解析时调用该委托

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大小来自“图像”标记?

静态void startElementSAX(void*ctx,const-xmlChar*localname,const-xmlChar*prefix,const-xmlChar*URI,int-nb\u名称空间,const-xmlChar**名称空间,int-nb\u属性,
int nb_默认值,常量xmlChar**属性)
{
如果(nb_属性>0)
{
NSMutableDictionary*AttributeDictionary=[NSMutableDictionary WithCapacity:(NSInteger)[NSNumber numberWithInt:nb_attributes]];

对于(int i=0;i不感兴趣,为什么不使用
NSXMLParser
?因为它速度更快且内存友好。。。
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]);
        }
    }
}
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];
    }
 }
}