XML解析: 系統(tǒng)的。


#import "MyXMLParser.h"
#import "NewsModel.h"

@interface MyXMLParser ()<NSXMLParserDelegate>

/** 解析節(jié)點的數(shù)組 */
@property (nonatomic, strong)NSMutableArray *newsListArray;

/** 當前解析的對象*/
@property (nonatomic, strong)NewsModel *curModel;

/** 當前解析的字符串*/
@property (nonatomic, strong)NSString *curString;

/** 存儲解析的結(jié)果*/
@property (nonatomic, strong)NSArray *dataArray;

@end

@implementation MyXMLParser

- (NSArray *)parseWithData:(NSData *)data {
    
    //系統(tǒng)的XML解析類
    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
    parser.delegate = self;
    
    [parser parse];//調(diào)用代理, 解決 問題。
    
    return self.dataArray;
}

#pragma mark - NSXMLParser代理
//節(jié)點開始的方法
- (void)parser:(NSXMLParser *)parser didStartElement:(nonnull NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(nonnull NSDictionary<NSString *,NSString *> *)attributeDict{
    
    //elementName是節(jié)點的名字
    if ([elementName isEqualToString:@"newslist"]) {
        //創(chuàng)建數(shù)組
        //newslist 開始
        // √
        
        self.newsListArray = [NSMutableArray array];
    }else if ([elementName isEqualToString:@"news"]){
        //創(chuàng)建一個對象
        //news 開始
        // ?
        
        self.curModel = [[NewsModel alloc] init];   // NewsModel
    }
    
}

//找到字符串的方法
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    
    self.curString = string;
    // ?
    
}

//節(jié)點結(jié)束的方法
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    
    if ([elementName isEqualToString:@"newslist"]) {
        // Array<NewsModel>
        // -ed
        //newslist 結(jié)束
        // √
        
        self.dataArray = self.newsListArray;
        self.newsListArray = nil;
        
    }else if ([elementName isEqualToString:@"news"]) {
        // Array<NewsModel>
        // -ing
        //news 結(jié)束
        // ?
        
        [self.newsListArray addObject:self.curModel];
        self.curModel = nil;
        
    }else{
        
        //給對象的屬性賦值
        //NewsModel
        // - ing
        // ?
        
        
        if (![elementName isEqualToString:@"newstype"]) {
            NSString *key = elementName;
            if ([key isEqualToString:@"id"]) {
                key = @"newsId";
            }
            //使用KVC賦值
            [self.curModel setValue:self.curString forKey:key];
        }
        
    }
    
}


@end


附: Model

?


#import <Foundation/Foundation.h>

@class NewsTypeModel;

@interface NewsModel : NSObject

@property (nonatomic, strong)NSString *newsId;
@property (nonatomic, strong)NSString *title;
@property (nonatomic, strong)NSString *body;

@property (nonatomic, strong)NSString *commentCount;
@property (nonatomic, strong)NSString *author;
@property (nonatomic, strong)NSString *authorid;

@property (nonatomic, strong)NSString *pubDate;
@property (nonatomic, strong)NSString *url;

@property (nonatomic, strong)NewsTypeModel *newstype;



@end


@class GDataXMLElement;

@interface NewsTypeModel : NSObject

@property (nonatomic, strong)NSString *type;
@property (nonatomic, strong)NSString *authoruid2;
@property (nonatomic, strong)NSString *eventurl;


@end





最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容