前端之家收集整理的这篇文章主要介绍了
XML解析1_XMLParser,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
#import "ViewController.h"
#import "TBXML.h"
@interface ViewController () <NSXMLParserDelegate>
@property (nonatomic,strong) NSMutableArray *mulArray;
@property (nonatomic,strong) NSMutableDictionary *mulDict;
@property (nonatomic,copy) NSString *key;
@property (nonatomic,copy) NSString *startTag;
@property (nonatomic,strong) NSMutableArray *dataArray;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self saxXML];
}
- (void)saxXML {
// 1.
// NSString *path = [[NSBundle mainBundle] pathForResource:@"Notes" ofType:@"xml"];
// NSURL *url = [NSURL fileURLWithPath:path];
// 2.
// ----------创建对象
NSURL *url = [[NSBundle mainBundle] URLForResource:@"Notes" withExtension:@"xml"];
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
// -----------设置委托
parser.delegate = self;
// -----------开始解析
[parser parse];
}
// <Note id="1">
// <CDate>2012-12-21</CDate>
// <Content>早上8点钟到公司</Content>
// <UserID>Allen</UserID>
// </Note>
#pragma mark -
#pragma mark xml parser delegate methods 5个方法 1. 文件解析开始 2. 开始标签 3. 标签内容 4. 结束标签 5. 文件解析结束
/** 1. 文档解析开始的时候调用 */
- (void)parserDidStartDocument:(NSXMLParser *)parser {
_mulArray = [NSMutableArray array];
NSLog(@"文档解析开始");
}
/** 2. 碰到开始标签时候调用 */
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString:@"Note"]) {
_key = attributeDict.allValues[0];
_mulDict = [[NSMutableDictionary alloc] init];
_startTag = elementName;
NSLog(@"开始标签 : %@ 属性 : %@",elementName,attributeDict);
}
}
/** 3. 碰到两个标签之间的内容的时候调用 */
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
// 去掉空格和换行 trim整齐
string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
if ([string isEqualToString:@""]) {
return ;
}
[_mulDict setObject:string forKey:_startTag];
NSLog(@"两个标签之间的内容 : %@",string);
}
/** 4. 碰到结束标签时候调用 */
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"Note"]) {
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:_mulDict forKey:_key];
[_mulArray addObject:dict];
}
[NSString stringWithFormat:@"/%@",elementName];
NSLog(@"结束标签 : %@",[NSString stringWithFormat:@"/%@",elementName]);
printf("\n");
}
/** 5. 文档解析结束的时候调用 */
- (void)parserDidEndDocument:(NSXMLParser *)parser {
NSLog(@"---------%@",_mulArray);
NSLog(@"文档解析结束");
}
@end
<?xml version="1.0" encoding="UTF-8"?>
<Notes>
<Note id="1">
<CDate>2012-12-21</CDate>
<Content>早上8点钟到公司</Content>
<UserID>Allen</UserID>
</Note>
<Note id="2">
<CDate>2012-12-22</CDate>
<Content>开发企业微信 模块一</Content>
<UserID>Allen</UserID>
</Note>
<Note id="3">
<CDate>2012-12-23</CDate>
<Content>开发企业微信 模块二</Content>
<UserID>Allen</UserID>
</Note>
<Note id="4">
<CDate>2012-12-24</CDate>
<Content>开发企业微信 模块三</Content>
<UserID>Allen</UserID>
</Note>
<Note id="5">
<CDate>2012-12-25</CDate>
<Content>开发企业微信 模块四</Content>
<UserID>Allen</UserID>
</Note>
<Note id="6">
<CDate>2012-12-26</CDate>
<Content>开发企业微信 上线</Content>
<UserID>Allen</UserID>
</Note>
</Notes>