XML解析GData、XMLParser

---恢复内容开始---

/*
 <tweet>
 <id>6462192</id>
 <portrait>
 http://static.oschina.net/uploads/user/587/1175932_50.jpg?t=1418648003000
 </portrait>
 <author>
 <![CDATA[ fywtat ]]>
 </author>
 <authorid>1175932</authorid>
 <body>
 <![CDATA[ 又被赶出来睡沙发 :smile: ]]>
 </body>
 <attach/>
 <appclient>3</appclient>
 <commentCount>1</commentCount>
 <pubDate>2015-09-01 00:05:27</pubDate>
 <imgSmall/>
 <imgBig/>
 <likeCount>2</likeCount>
 <isLike>0</isLike>
 <likeList>...</likeList>
 </tweet>
 */

=====================================
#pragma mark - 下载解析数据
-(void)startDownloadData
{
    NSString *urlString = OCTweetURL;
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    [manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

        //解析数据
        GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:responseObject options:0 error:nil];
        if(doc)
        {
            NSArray *tweets = [doc nodesForXPath:@"//tweet" error:nil];
            for (GDataXMLElement *element in tweets)
            {
                TweetModel *model = [[TweetModel alloc] init];
                for (GDataXMLElement *subElement in element.children) {
                    [model setValue:subElement.stringValue forKey:subElement.name];
                }
                [_dataArray addObject:model];

            }
            [self.tableView reloadData];
        }
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"error = %@",error);
    }];

}
//根据传入的结点创建model代码
-(void)createModelCodeByElement:(GDataXMLElement *)element modelName:(NSString *)name
{
    printf("\[email protected] %s : NSObject\n",name.UTF8String);
    for (GDataXMLElement *subElement in element.children)
    {
        printf("@property (copy,nonatomic) NSString *%s;\n",subElement.name.UTF8String);
    }
    printf("@end\n");
}

<oschina>
<tweetCount>500</tweetCount>
<!--  总动弹数  -->
<pagesize>20</pagesize>
<tweets>
<tweet>
<id>6463329</id>
<portrait>
http://static.oschina.net/uploads/user/716/1433031_50.jpg?t=1433144307000
</portrait>
<author>
<![CDATA[ ahhg ]]>
</author>
<authorid>1433031</authorid>
<body>
<![CDATA[ 技术水平不上不下,有点迷茫了 ]]>
</body>
<attach/>
<appclient>1</appclient>
<commentCount>0</commentCount>
<pubDate>2015-09-01 09:44:43</pubDate>
<imgSmall/>
<imgBig/>
<likeCount>0</likeCount>
<isLike>0</isLike>
<likeList></likeList>
</tweet>
<tweet>...</tweet>
<tweet>...</tweet>
<tweet>

解析数据

GData

-(void)startDownloadData
{
    NSString *urlString = OCTweetURL;
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    [manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

        //解析数据
        GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:responseObject options:0 error:nil];
        if(doc)
        {
            //存取tweet节点的数组
            NSArray *tweets = [doc nodesForXPath:@"//tweet" error:nil];
            //遍历单个tweet节点,一个element属于一个tweet节点
            for (GDataXMLElement *element in tweets)
            {

                TweetModel *model = [[TweetModel alloc] init];
                //遍历element(tweet)的子节点 element.children 属于一个数组
                //<id>6463329</id> 一个subElement节点的键与值
                for (GDataXMLElement *subElement in element.children) {
                    [model setValue:subElement.stringValue forKey:subElement.name];
                }
                [_dataArray addObject:model];
            }

            [self.tableView reloadData];
        }

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"error = %@",error);
    }];

}

系统XML解析

<?xml version="1.0" encoding="UTF-8"?>
<!-- 每个XML文档都由XML序言开始,告诉解析器或浏览器这个文件应该按照XML规则进行解析 -->

<!-- XML标签没有被预定义,你需要自行定义标签。XML被设计为具有自我描述性 -->
<qfclass>
    <student>
        <name>优衣库</name>
        <address>北京三里屯</address>
    </student>
    <student>
        <name>黑人</name>
        <address>美国加利福尼亚</address>
    </student>
    <student>
        <name>毛爷爷</name>
        <address>中国精英</address>
    </student>
    <student>
        <name>葫芦小金刚</name>
        <address>葫芦娃</address>
    </student>
    <student>
        <name>蛇精</name>
        <address>报告大王</address>
    </student>
</qfclass>

XML

 1 #import "CLJXMLParser.h"
 2 #import "Student.h"
 3
 4 @interface MCJXMLParser ()<NSXMLParserDelegate>
 5 {
 6     NSMutableString  *_elementStr;
 7     Student          *_student;
 8
 9 }
10 @end
11
12 @implementation MCJXMLParser
13 - (void)test
14 {
15     NSString *path = @"/Users/ms/Desktop/备课/0814/test.xml";
16     NSData *data = [NSData dataWithContentsOfFile:path];
17
18     // 解析器
19     NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
20     parser.delegate = self;
21
22     // 开始解析
23     [parser parse];
24 }
25
26 #pragma mark - NSXMLParserDelegate
27
28 #pragma mark  开始解析文档,在这里做初始化工作
29 - (void)parserDidStartDocument:(NSXMLParser *)parser
30 {
31     _arrayM = [NSMutableArray array];
32     _elementStr = [NSMutableString string];
33 }
34
35 #pragma mark 开始读取节点 清空缓存数据
36 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
37 {
38     if ([elementName isEqualToString:@"student"]) {
39         _student = [[Student alloc] init];
40     }
41     // 清空拼接字符串
42     [_elementStr setString:@""];
43 }
44
45 #pragma mark  循环查找节点内容
46 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
47 {
48     // 拼接字符串
49     [_elementStr appendString:string];
50 }
51
52 #pragma mark 一个节点完成
53 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
54 {
55     NSString *result = [NSString stringWithString:_elementStr];
56     if ([elementName isEqualToString:@"student"]) {
57         [_arrayM addObject:_student];
58     } else if ([elementName isEqualToString:@"name"]){
59         _student.name = result;
60     } else if ([elementName isEqualToString:@"address"]) {
61          _student.address = result;
62     }
63 }
64
65 #pragma mark 解析完成,处理数据
66 - (void)parserDidEndDocument:(NSXMLParser *)parser
67 {
68     NSLog(@"%@", _arrayM);
69 }
70
71 #pragma mark 解析出错,清理数据
72 - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
73 {
74     // 解析发生错误,需要把解析过程中生成数据清除,否则会出现不必要的麻烦
75     [_arrayM removeAllObjects];
76 }
77 @end

NSXMLParser解析

---恢复内容结束---

时间: 2024-10-13 22:14:56

XML解析GData、XMLParser的相关文章

XML解析Gdata

做iOS开发一直都是用的Jason解析 最近一家公司是用的XML解析 好久都没有用过了 有些陌生了 今天来仔细的描述一下XML解析! 说到XML解析就一定要描述两个概念 一个 叫DOM 一个叫SAX SAX是Simple API for XML的缩写,它并不是由W3C官方所提出的标准,可以说是“民间”的事实标准.实际上,它是一种社区性质的讨论产物.虽然如此,在XML中对SAX的应用丝毫不比DOM少,几乎所有的XML解析器都会支持它.SAX是一种轻量型的方法,它是事件驱动的,也就是说,它并不需要读

iOS-Gdata XML解析配置和简单使用

简单介绍使用废话少说直接上图就能看明白... 导入libxml2,使用第三方AFNetworking网络请求,第三方XML解析GData GData需要的配置 Build Settings 里搜索,添加如下 如果是ARC ,需要加上 -fno-objc-arc 首先找一个xml网址使用AFNetworking请求得到NSData数据 先打开火狐浏览器看xml的层次结构(复制网址在火狐浏览器上打开) 使用GData解析,记住一层一层解析

一个ios工程相关的配置小问题解决介绍,gdata xml解析相关

在我们ios的开发中gdataxml是一个常用的开源实现,很多第三方的库在实现里也会加入它的源码.我们在使用此类库或者直接使用gdataxml库时,切记要在工程中引入libxml2这个框架,否则编译会报错,提示类似下面: Undefined symbols for architecture armv7: "_xmlDocDumpMemory", referenced from: xxx 引入该框架问题即可解决. 一个ios工程相关的配置小问题解决介绍,gdata xml解析相关,码迷,

网络之XML解析-GData

GDataXML是一套Google使用Objective-C开发的DOM方式XML解析类库,支持读取和修改XML文档,支持XPath方式查询, GDataXML 是 iOS 下的一款轻量级 XML 解析器.它与C#的XmlDocument类似. 一.GData配置 1.将类引入项目中,添加libxml2.dylib 2.在Build Phases的Compile Sources中找到GDataXMLNode.m添加-fno-objc-arc 3.进入Build Settings,搜索Header

IOS之XML解析

IOS之XML解析 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> <root> <systemConfig> <CityName>北京</CityName> <CityCode>201</CityCode> <ParentCityCode> 0</ParentCityCode> <areaCode>

iOS开发之XML解析

iOS开发之XML解析 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示XML文件版本, 内部文本使用的编码 <root> 表示根节点 <CityName>北京</CityName>  一个结点, CityName是结点名, 北京结点值 <Item key="1" value="A"></Item>  

IOS开发--云开发(云请求&amp;&amp;XML解析)

概要 本章主要简示了在IOS里面如何发出云请求,以及处理云端返回的数据,包括NSUrl等以及XML解析部分的知识.具体使用是一个查询IP的请求应用. 结果展示 (用了10几次不让用了) 流程概要 1.选取查询IP的云请求链接,并在浏览器里面试试效果,了解查询返回结果的格式 2.新建一个工程,拖拉一个UITextField和UIView,分别用作输入IP地址信息和查询结果展示 3.在发出云请求的时候,根据查询的IP构造查询的地址链接,然后使用NSURL生成链接,使用NSURLRequest构造请求

IOS开发之XML解析以及下拉刷新上拉加载更多的分享

IOS开发之XML解析 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示XML文件版本, 内部文本使用的编码 <root> 表示根节点 <CityName>北京</CityName>  一个结点, CityName是结点名, 北京结点值 <Item key="1" value="A"></Item>  

JSON&&XML以及XML解析的常用方法

JSONJSON(JavaScript Object Notation)一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.可在不同平台之间进行数据交换.JSON采用兼容性很高的.完全独立于语言文本格式,同时也具备类似于C语言的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)体系的行为.这些特性使JSON成为理想的数据交换语言.  XML扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件