0

XMLファイルを読み取る必要があるiPhoneアプリを作成しています

プロパティ

@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *fileName;
@property (nonatomic, strong) NSString *description;
@property (nonatomic, strong) NSString *date;
@property (nonatomic, strong) NSString *link;

タグ検索(ここでは「タイトル」のみ)

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{

    // FIRST TAG XML
    if([elementName isEqualToString:@"title"]){
        // GET DATA FROM XML 
        getData = YES; // getData is a bool which is NO initialy
        NSLog(@"Found");
    }
    else
        NSLog(@"Not Found");

}

データの取得

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{

    if(getData)
    {
        // CREATION DE L OBJET DEPUIS LE XML
        NSLog(@"This is your desired data = %@",string);
        NSLog(@"Object creation ...");
        Pebkac *peb = [[Pebkac alloc] init];
        NSLog(@"Setup the name ...");
        [peb setName:@"Pebkac"];
        NSLog(@"Small descrption ...");
        [peb setDescription:string];
        [pebkacs addObject:peb];
    }
}

終了タグ

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

    // XML END TAG
    if ([elementName isEqualToString:@"title"]){
        getData = NO;
    }
}

私が観察したバグは、タグ間のすべてのテキストを取得できない場合があることです。

4

2 に答える 2

6

foundCharsN回呼び出すことができます。あなたはいつもそこに着く文字に文字列を設定します。あなたは何度も何度も文字を追加しなければなりません、そしてあなたがendTag電話を受けたとき、あなたは結果を設定しなければなりません。

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    if(!foundChars)
        foundChars = [[NSMutableString alloc] init];
    [foundChars appendString:string];
}

そして最後にそれを使用してください-例はあなたの質問に合うように書かれています

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    if(getData)
    {
        // CREATION DE L OBJET DEPUIS LE XML
        NSLog(@"This is your desired data = %@",string);
        NSLog(@"Object creation ...");
        Pebkac *peb = [[Pebkac alloc] init];
        NSLog(@"Setup the name ...");
        [peb setName:@"Pebkac"];
        NSLog(@"Small descrption ...");
        [peb setDescription:foundChars];
        [pebkacs addObject:peb];
    }

    //reset
    foundChars = nil;

    // XML END TAG
    if ([elementName isEqualToString:@"title"]){
        getData = NO;
    }
}
于 2012-12-26T18:24:07.890 に答える
0

方法

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

要素ごとに複数回呼び出される場合があります。stringこのメソッドがタグごとに呼び出されるたびに一緒に追加してから、次のオブジェクトに設定する必要があります。

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

の使用を適切に達成する方法の簡潔な例については、この質問/回答を参照してくださいNSXMLParser

于 2012-12-26T18:23:22.387 に答える