成都网站建设设计

将想法与焦点和您一起共享

iOS开发-XML解析-创新互联

以请求本地文件中的XML数据为例,说明iOS下如何用苹果自带类NSXMLParser解析XML数据。

创新互联建站专注于巴青网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供巴青营销型网站建设,巴青网站制作、巴青网页设计、巴青网站官网定制、微信小程序定制开发服务,打造巴青网络公司原创品牌,更为您提供巴青网站排名全网营销落地服务。

本地文件students.xml中的数据格式如下:

  StudentInfo

  

    Tom

    10

    JiangSu University

  

  

    James

    22

    NanJing University

  

  

    John

    23

    HongKong University

  

详细解析步骤

.h文件

声明代理:

定义属性:

@property(nonatomic,retain)NSString *currentValue;

@property(nonatomic,retain)NSMutableDictionary *messageDic;

@property(nonatomic,retain)NSMutableDictionary *studentInfoDic;

@property(nonatomic,retain)NSMutableArray *finalArray;

.m文件

@synthesize currentValue = _currentValue;

@synthesize messageDic = _messageDic;

@synthesize studentInfoDic = _studentInfoDic;

@synthesize finalArray = _finalArray;

- (void)viewDidLoad

{

  [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

  // 获取xml文件的路径

  NSString*xmlPath=[[NSBundle mainBundle] pathForResource:@"students"ofType:@"xml"];

  // 转化为Data

  NSData *data = [[NSData alloc] initWithContentsOfFile:xmlPath];

  // 初始化

  NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:data];

  // 代理

  xmlParser.delegate = self;

  // 开始解析

  BOOL flag = [xmlParser parse];

  if (flag) {

    NSLog(@"解析成功");

    NSLog(@"self.finalArray = %@",_finalArray);

  }

  else{

    NSLog(@"解析出错");

  }

  [data release];

  [xmlParser release];

}

//代理方法

//开始解析

-(void)parserDidStartDocument:(NSXMLParser *)parser

{

  // 用数组存储每一组信息

  self.finalArray = [[[NSMutableArray alloc] init]autorelease];

}

//开始节点

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict

{

  if ([elementName isEqualToString:@"message"]) {

    self.messageDic = nil;

    self.messageDic = [[[NSMutableDictionary alloc] initWithCapacity:0]autorelease];

  }

  if ([elementName isEqualToString:@"student"]) {

    self.studentInfoDic = nil;

    self.studentInfoDic = [[[NSMutableDictionary alloc]initWithCapacity:1]autorelease];

  }

}

//发现节点值时

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

{

  self.currentValue = string;//currentValue暂存节点值

}

//结束节点时

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName

{

  if ([elementName isEqualToString:@"message"]) {

    [self.messageDic setObject:_currentValue forKey:elementName];

    //元素存入数组

    [self.finalArray addObject:_messageDic];

  }

  if ([elementName isEqualToString:@"name"]||

      [elementName isEqualToString:@"age"]||

      [elementName isEqualToString:@"school"])

    {

            //发现student的具体信息:age,name,school存入字典

      [self.studentInfoDic setObject:_currentValue forKey:elementName];

    }

  if ([elementName isEqualToString:@"student"]) {

    //元素存入数组

       [self.finalArray addObject:_studentInfoDic];

  }

  self.currentValue = @"";

}

最终的结果如下:

2014-06-02 14:03:02.104 XMLParser[5102:60b] 解析成功

2014-06-02 14:03:02.108 XMLParser[5102:60b] self.finalArray = (

    {

    message = StudentInfo;

  },

    {

    age = 10;

    name = Tom;

    school = "JiangSu University";

  },

    {

    age = 22;

    name = James;

    school = "NanJing University";

  },

    {

    age = 23;

    name = John;

    school = "HongKong University";

  }

)

以下总结来自:http://blog.csdn.net/like7xiaoben/article/details/7699965

注意:

解析xml数据的时候,

   每当遇到元素节点的时候都会执行didStartElement代理方法,如果有属性节点,可以直接在这个方法中获取属性的值;

   每当遇到文本节点的时候都会执行foundCharacters代理方法,获取文本节点中的值然后到didEndElement方法中进行区分。

     如果是换行符的话也会获取,因为换行符也是文本节点,不过当一个元素节点结束后的换行符是不会获取的。

  比如说:    (换行符1)

              

  • 文本节点
  •                      (换行符2)

    元素节点前后各有一个换行符,这时只会获取换行符1,而不会获取换行符2。

    另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


    网站标题:iOS开发-XML解析-创新互联
    文章分享:http://chengdu.cdxwcx.cn/article/dchssg.html