zoukankan      html  css  js  c++  java
  • 使用NSXMLParser解析xml文件

     1. 设置委托对象,开始解析
        NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];   //或者也可以使用initWithContentsOfURL直接下载文件,但是有一个原因不这么做:
        // It's also possible to have NSXMLParser download the data, by passing it a URL, but this is not desirable
        // because it gives less control over the network, particularly in responding to connection errors.
        [parser setDelegate:self];
        [parser parse];
    
        2. 常用的委托方法
        - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
                                    namespaceURI:(NSString *)namespaceURI
                                    qualifiedName:(NSString *)qName 
                                    attributes:(NSDictionary *)attributeDict;
        - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
                                    namespaceURI:(NSString *)namespaceURI 
                                    qualifiedName:(NSString *)qName;
        - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;
        - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError;
    
        static NSString *feedURLString = @"http://www.yifeiyang.net/test/test.xml";
    
        3.  应用举例
        - (void)parseXMLFileAtURL:(NSURL *)URL parseError:(NSError **)error
        {
            NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:URL];
            [parser setDelegate:self];
            [parser setShouldProcessNamespaces:NO];
            [parser setShouldReportNamespacePrefixes:NO];
            [parser setShouldResolveExternalEntities:NO];
            [parser parse];
            NSError *parseError = [parser parserError];
            if (parseError && error) {
                *error = parseError;
            }
            [parser release];
        }
    
        - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI 
                                            qualifiedName:(NSString*)qName attributes:(NSDictionary *)attributeDict{
            // 元素开始句柄
            if (qName) {
                elementName = qName;
            }
            if ([elementName isEqualToString:@"user"]) {
                // 输出属性值
                NSLog(@"Name is %@ , Age is %@", [attributeDict objectForKey:@"name"], [attributeDict objectForKey:@"age"]);
            }
        }
    
        - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI 
                                            qualifiedName:(NSString *)qName
        {
            // 元素终了句柄
            if (qName) {
                   elementName = qName;
            }
        }
    
        - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
        {
            // 取得元素的text
        }
    
        NSError *parseError = nil;
        [self parseXMLFileAtURL:[NSURL URLWithString:feedURLString] parseError:&parseError];
    
    
  • 相关阅读:
    form 表单提交被拦截的问题处理方法
    GitLab篇之备份还原
    GitLab篇之Linux下环境搭建
    如何管理我的开发团队
    基于静态站点内容动态推送的方案
    一个小白的程序之路(自身经历)
    敏捷开发方法学及应用
    PMBOK项目管理九大知识领域和五大流程 --美国IT项目管理硕士笔记(二)
    IT项目为什么失败 --美国IT项目管理硕士笔记(一)
    五年.net程序员Java学习之路
  • 原文地址:https://www.cnblogs.com/jiewong/p/1925456.html
Copyright © 2011-2022 走看看