XMLParser iPhone SDK

avi*_*nat 0 iphone objective-c nsxmlparser ios

我正在创建一个需要读取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;
Run Code Online (Sandbox Code Playgroud)

搜索标签(此处仅用于"标题")

-(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");

}
Run Code Online (Sandbox Code Playgroud)

获取数据

-(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];
    }
}
Run Code Online (Sandbox Code Playgroud)

结束标记

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

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

我观察到的错误是,有时它不能获得标签之间的所有文本.

Dai*_*jan 6

foundChars可以被称为N次.您总是将字符串设置为您到达的字符.你必须一次又一次地附加字符,当你endTag接到电话时,你必须设置结果.

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

然后在最后使用它 - 编写的示例适合您的问题

-(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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • +1"foundChars可以被称为N次." 这应该用Apple的文档中的大写字母书写. (3认同)