7

これは、libxml解析を使用して解析したいxml構造です。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

「キャンペーン」タグ( 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サイズ?

4

1 に答える 1

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

これを試して..

于 2012-06-05T07:07:34.627 に答える