简介
iOS SDK的NSXMLParser解析XML文档是事件驱动模式的,即采用SAX方式来解析XML格式文档。NSXMLParser在处理XML文档的过程中当遇到一些要素(元素、属性、CDATA块、评论等)时会通知它的委托,而自身不对解析的要素进行任何处理,全权委托给NSXMLParserDelegate处理。同时它也会报告错误。
使用步骤
1. 加载文件
NSString *pathFile = [[NSBundle mainBundle] bundlePath];
NSString *path = [[NSString alloc] initWithString:[pathFile stringByAppendingPathComponent:@"XMLTest.xml"]];
NSURL *xmlURL = [NSURL fileURLWithPath:path];
NSXMLParser *mparser = [[ NSXMLParser alloc] initWithContentsOfURL:xmlURL];
2. 设置代理
[mparser setDelegate:self];
3、开始解析
BOOL flag = [mparser parse];//会执行代理方法
if(flag) {
NSLog(@"ok");
}else{
NSLog(@"获取指定路径的xml文件失败");
}
//开始解析文件
- (void)parserDidStartDocument:(NSXMLParser *)parser
//遇到节点开始的标志执行,如遇到<result>。通过该方法可以获得节点属性
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
//遇到节点值或换行时执行,如遇到<result>结果</result>中的“结果”;注意,换行也会执行该方法,可用[string characterAtIndex:0] != '\n'进行判断
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
//遇到节点结束标志时执行,如遇到</result>。换行不会执行该方法
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
//文件解析结束时执行
- (void)parserDidEndDocument:(NSXMLParser *)parser
解析规则
遇到开始节点,如<result>,执行:didStartElement,换行、特殊字符不执行该方法
遇到节点值,如<result>结果</result>,执行foundCharacters
遇到结束节点,如</result>,执行didEndElement,换行、特殊字符不执行该方法
遇到换行,执行foundCharacters
例子:
<result> //didStartElement(开始节点)--foundCharacters(换行)
<meeting addr="203"> //didStartElement--foundCharacters
<creator>张一</creator> //didStartElement--foundCharacters--didEndElement--foundCharacters(换行)
<member> //didStartElement--foundCharacters
<name>张二</name> //didStartElement--foundCharacters--didEndElement--foundCharacters(换行)
<age>20</age> //didStartElement--foundCharacters--didEndElement--foundCharacters(换行)
</member> //didEndElement--foundCharacters(换行)
</result>//didEndElement--foundCharacters