IOS 解析XML--使用NSXML

一、解析文档顺序触发的函数

1.parserDidStartDocument,在文档的时候触发。

2.parser:didStartElement:namespaceURI:qualifiedName:attributes,遇到一个开始标签时触发,其中namespaceURI部分是命名空间,qualifiedName是限定名,attributes是字典类型的属性集合。

3.parser:foundCharacters,遇到字符串是触发。

4.parser:didEndElement:namespaceURI:qualifiedName,遇到结束标签时触发。

5.parserDidEndDocument,遇到文档结束时触发。

二、NSXMLParser是解析类,它有3个构造方法

1.initWithContentsOfURL,可以使用URL对象创建解析对象,本例中采用的是该方法,先从资源文件中加载获得URL对象,再使用URL对象构建解析对象。

2.initWithData,可以使用NSData创建解析对象。

3.initWithStream,可以使用IO流对象创建解析对象。

解析对象创建好后需要指定委托属性对象delegate为self,然后发送parse消息,开始解析文档。

三、代码

NotesXMLParser.h

#import <Foundation/Foundation.h>

@interface NotesXMLParser : NSObject <NSXMLParserDelegate>

//解析出的数据内部是字典类型
@property (strong,nonatomic) NSMutableArray *notes;
//当前标签的名字
@property (strong,nonatomic) NSString *currentTagName;

//开始解析
-(void)start;

@end

NotesXMLParser.m

#import "NotesXMLParser.h"

@implementation NotesXMLParser

-(void)start
{
    NSString* path = [[NSBundle mainBundle] pathForResource:@"Notes" ofType:@"xml"];

    NSURL *url = [NSURL fileURLWithPath:path];
    //开始解析XML
    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
    parser.delegate = self;
    [parser parse];
    NSLog(@"解析完成...");
}

//文档开始的时候触发
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
    _notes = [NSMutableArray new];
}

//文档出错的时候触发
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
{
    NSLog(@"%@",parseError);
}

//遇到一个开始标签时候触发
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI
 qualifiedName:(NSString *)qualifiedName
    attributes:(NSDictionary *)attributeDict
{
    _currentTagName = elementName;
    if ([_currentTagName isEqualToString:@"Note"]) {
        NSString *_id = [attributeDict objectForKey:@"id"];
        NSMutableDictionary *dict = [NSMutableDictionary new];
        [dict setObject:_id forKey:@"id"];
        [_notes addObject:dict];
    }

}

//遇到字符串时候触发
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    //替换回车符和空格
    string =[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    if ([string isEqualToString:@""]) {
        return;
    }
    NSMutableDictionary *dict = [_notes lastObject];

    if ([_currentTagName isEqualToString:@"CDate"] && dict) {
        [dict setObject:string forKey:@"CDate"];
    }

    if ([_currentTagName isEqualToString:@"Content"] && dict) {
        [dict setObject:string forKey:@"Content"];
    }

    if ([_currentTagName isEqualToString:@"UserID"] && dict) {
        [dict setObject:string forKey:@"UserID"];
    }
}

//遇到结束标签时候出发
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI
 qualifiedName:(NSString *)qName;
{
    self.currentTagName = nil;
}

//遇到文档结束时候触发
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadViewNotification" object:self.notes userInfo:nil];
    self.notes = nil;
}

@end
时间: 2024-10-29 19:09:44

IOS 解析XML--使用NSXML的相关文章

IOS 解析XML文档

前段时间想找点事做,就是试着看能不能用豆瓣的API做点什么,于是就碰到了这个问题——XML解析. 老师还没讲,只能自己去查. XML文档解析主要有SAX和DOM两种模式,IOS上两种模式都可以用,这里就不做过多介绍,我选择的SAX模式. IOS解析XML用的是自带的NSXML框架,框架的核心是NSXMLParser类和它的委托协议NSXMLParserDelegate,其主要的解析工作是在NSXMLParserDelegate实现类中完成的.委托中定义了许多回掉方法,在SAX解析器从上到下遍历X

iOS解析XML数据

iOS中解析XML数据的类是  NSXMLParser,详细使用方法如下: 假设现在在内存中有XML的二进制数据对象(NSData):data(该数据可能来自网络,也可能是本地的文件数据),设置NSXMLParser对象的协议,代码如下: NSXMLParser *xmlParse = [[NSXMLParser alloc] initWithData:data]; [xmlParse setDelegate:self]; [xmlParse parse];// 解析开始 解析对象设置后,我们需

IOS解析XML文件

这里使用NSXMLParser来解析,这个是apple自带的xml解析库,有个参考文章:http://www.raywenderlich.com/553/xml-tutorial-for-ios-how-to-choose-the-best-xml-parser-for-your-iphone-project 在Xcode中加入一个xml文件: <?xml version="1.0" encoding="ISO-8859-1"?> <root>

ios解析XML和json数据

解析的基本概念所谓“解析”:从事先规定好的格式串中提取数据解析的前提:提前约定好格式.数据提供方按照格式提供数据.数据获取方按照格式获取数据iOS开发常见的解析:XML解析.JSON解析 一.XML数据结构XML数据结构基本概念XML:Extensible Markup language (可扩展标记语言),主流格式之一,可以用来存储和传输数据格式之一,可以用来存储和传输数据 XML数据格式的功能1.数据交换2.内容管理3.用作配置文件 XML数据结构的语法1.声明2.节点使用一对标签表示3.根

iOS解析XML实现省市区选择

1.具体内容就不再赘述了.直接看关键代码. viewController.h // // ViewController.h // ParseXmlToRealizeChooseCityDemo // // Created by zhanggui on 15/7/25. // Copyright (c) 2015年 zhanggui. All rights reserved. // #import <UIKit/UIKit.h> @interface ViewController : UIVie

IOS中使用TBXML解析XML

IOS SDK自带的NSXML框架是采用SAX模式解析的,是基于事件驱动型的,主要解析工作在NSXMLParseDelegate中完成,解析过程中遇到开始标签.结束标签.文档开始.文档结束和字符串时触发Delegate中的方法完成解析,这种方式使用起来还是比较麻烦的.在实际工作中,我们可以选用一个比较简单易用的第三方框架TBXML,其下载地址为:https://github.com/71squared/tbxml 下载完成解压后,我们只需要将TBXML-Headers和TBXML-Code文件夹

IOS开发使用NSXMLParser、GDataXML两种方式解析XML数据

概括:XML数据解析方式有 *IOS原生的NSXMLParser,只支持SAX方式解析,使用简单 *C语言的libxml2,同时支持DOM和SAX方式解析 *google的GDataXML,只支持DOM方式解析,基于libxml2,使用时需要将编译环境配置为非ARC,并添加libxml2.dylib动态库 GDataXMLDocument 1 使用GDataXML的DOM方式解析XML,需要导入#import "GDataXMLNode.h" /** *  DOM方式解析XML数据 *

iOS多线程与网络开发之解析xml

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源码下载:点我传送 游戏官方下载:http://dwz.cn/RwTjl 游戏视频预览:http://dwz.cn/RzHHd 游戏开发博客:http://dwz.cn/RzJzI 游戏源码传送:http://dwz.cn/Nret1 A.XML基本知识 1.xml概念 什么是XML全称是Extensible Markup Lan

iOS开发之解析XML格式数据

XML格式的数据是一种数据的传输格式.因为它方便编写.结构清晰,所以深受程序猿的喜爱,非常多人都喜欢使用XML格式数据传输或者作为程序的配置信息. 如今我将来实如今iOS中解析XML格式数据,语言使用Swift. 首先自己写一个简单的XML: <data> <person age="15">zhangsan</person> <person age="2">lisi</person> <person&