#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