GDataXMLNode创建xml:

#import <Foundation/Foundation.h>
2 #import "GDataXMLNode.h"
3
4 int main()
5 {
6 NSError *error;
7 //创建根节点
8 GDataXMLElement *rootElement = [GDataXMLNode elementWithName:@"abc"];
9 //创建第一个子节点
10 GDataXMLElement *element = [GDataXMLNode elementWithName:@"name" stringValue:@"东
11 方红"];
12 //添加子节点到根节点上
13 [rootElement addChild: element];
14
15 //使用根节点创建xml文档
16 GDataXMLDocument *rootDoc = [[GDataXMLDocument alloc] initWithRootElement:rootElement];
17 //设置使用的xml版本号
18 [rootDoc setVersion:@"1.0"];
19 //设置xml文档的字符编码
20 [rootDoc setCharacterEncoding:@"utf-8"];
21
22 //获取并打印xml字符串
23 NSString *str = [[NSString alloc] initWithData:rootDoc.XMLData encoding:NSUTF8StringEncoding];
24 NSLog(@"%@", str);
25
26 return 0;
27 }

编译命令为:

1 clang main.m GDataXMLNode.m -framework Foundation -lxml2 -I /usr/include/libxml2/

因为GDataXMLNode里使用了xml2,所以要记得将它连接进来,并且需要指定头文件搜索路径。还有一个需要注意的就是记得用setCharacterEncoding指定字符集。

-------------------------------------------------------------------------------------------------------------------------

city.xml

<省份>

<河北>

<city>石家庄</city>

<city>唐山</city>

<city>秦皇岛</city>

<city>邯郸</city>

<city>邢台</city>

<city>保定</city>

<city>承德</city>

<city>沧州</city>

<city>廊坊</city>

<city>衡水</city>

</河北>

<河南>

<city>郑州</city>

<city>开封</city>

<city>洛阳</city>

<city>平顶山</city>

<city>安阳</city>

<city>鹤壁</city>

<city>新乡</city>

<city>焦作</city>

<city>濮阳</city>

<city>许昌</city>

<city>漯河</city>

<city>三门峡</city>

<city>南阳</city>

<city>商丘</city>

<city>信阳</city>

<city>周口</city>

<city>驻马店</city>

</河南>

</省份>

 
    

- (void)getData

{

  //一个字典

self.dic = [[NSMutableDictionary alloc] initWithCapacity:10];

// 获取包里面city.xml路径

NSString *path = [[NSBundle mainBundle] pathForResource:@"city" ofType:@"xml"];

  //二进制数据

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

  //GDataXMLDocument开始解析xml

GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil]

  //获得根节点

GDataXMLElement *root = document.rootElement;

  //根节点下的所有子节点(不包括孙子节点等)

NSArray *rootson      = [root children];

  // 遍历根节点的子节点

for (GDataXMLElement * element in rootson) {

    //所有的city按以省名为key放入字典中

NSMutableArray *ary = [self.dic objectForKey:element.name];

if (ary == nil) {

ary = [[NSMutableArray alloc] initWithCapacity:20];

[self.dic setObject:ary forKey:element.name];

}

NSArray *citys    = element.children;

for (GDataXMLElement *city in citys) {

//[self.dic setObject:city.stringValue forKey:city.name];

[ary addObject:city.stringValue];

}

}

}

2.第二种遍历方法

    

- (void)getData1

{

self.dic = [[NSMutableDictionary alloc] initWithCapacity:10];

NSString *path = [[NSBundle mainBundle] pathForResource:@"city" ofType:@"xml"];

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

GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];

GDataXMLElement *root = document.rootElement;

//下面解析开始   此种方法采用  nodesForXpath

NSArray *prov = @[@"河南",@"河北"];

for(int i=0 ;i<[prov count];i++)

{

    //通过 nodesForXPath  可以获得root节点(此处root为根节点,也可以不是根节点)下得所有 符合//%@/city 格式的节点,

    //%@是 河南,河北等, 通过此格式,获得所有的city节点(可以是孙子节点),限制是此city节点的父节点必须是 %@

NSArray *array = [root nodesForXPath:[NSString stringWithFormat:@"//%@/city",prov[i]] error:nil];

//获得所有的 河南(或河北)下的city后,以河南(河北)为key放入字典

     for (GDataXMLElement *element in array) {

NSMutableArray *ary = [self.dic objectForKey:prov[i]];

if (ary == nil) {

ary = [[NSMutableArray alloc] initWithCapacity:20];

[self.dic setObject:ary forKey:prov[i]];

}

[ary addObject:element.stringValue];

}

}

}

注:

elementsForName这个方法也可以通过名字获得节点 ,和nodesForXPath类似,但仅限于获得子节点

GDataXMLNode创建和解析XML的更多相关文章

  1. iOS 用GDataXMLNode创建和解析XML

    原文地址:http://blog.csdn.net/gf771115/article/details/7718403 NSError *error; //    NSString *path = [[ ...

  2. 使用dom4j创建和解析xml文件

    使用dom4j创建和解析xml文件 在项目开发中,我们经常会遇到xml文件的创建和解析从别人接口得到的xml文件,而我们最常使用的组件是dom4j. 下面我就以代码来讲解一下如何使用dom4j来创建x ...

  3. 使用dom4j创建和解析xml

    之前工作中用到了,相信写java的都会碰到xml,这里写了两个方法,创建和解析xml,废话不多说,直接上代码 package xml; import java.io.File; import java ...

  4. (转)Android 创建与解析XML—— Dom4j方式 .

    转:http://blog.csdn.net/ithomer/article/details/7521605 1.Dom4j概述 dom4j is an easy to use, open sourc ...

  5. MsXml创建和解析XML示例

    一.MsXml创建XML文档示例 // XmlCreationDemo.cpp #include <stdlib.h> #include <stdio.h> // 引入MSXM ...

  6. Java 创建过滤器 解析xml文件

    今天写了一个过滤器demo,现在是解析actions.xml文件,得到action中的业务规则:不需要导入任何jar包 ActionFilter过滤器类: package accp.com.xh.ut ...

  7. dom4j创建和解析xml文档

    DOM4J解析  特征: 1.JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能. 2.它使用接口和抽象基本类方法. 3.具有性能优异.灵活性好.功能强大和极端易用的特点. 4.是一个开 ...

  8. PHP创建与解析 XML 1 (36)

    一.使用SimpleXML操控XML 要处理XML 文件,有两种传统的处理思路:SAX 和DOM.SAX 基于事件触发机制,对XML 文件进行一次扫描,完成要进行的处理:DOM 则将整个XML 文件构 ...

  9. PHP使用SimpleElement创建和解析xml文件

    <!-- 使用SimpleXMLElement生成xml文件 --><?php//生成一个xml文件 //xml字符串$_xml = <<<_xml<?xml ...

随机推荐

  1. IntelliJ IDEA使用之快捷键

    1. 自动完成代码 要完成代码 只需使用 Set<SSHConfig> sshConfigs = webConfig.getSshConfigs(); webConfig.getSshCo ...

  2. MySQL多实例配置

    实验环境:RHEL6.4为最小化安装,mysql安装包为通用二进制安装包,版本为mysql-5.6.26 创建mysql用户 #useradd –M –s /sbin/nologin mysql #y ...

  3. Html5中的video元素

    最近在做门户的时候遇到要显示企业的视频介绍,需要找到一个在aspx页面播放视频的html,最后找到了是一段HTML5最新的html代码,如下: /// <summary> /// 播放视频 ...

  4. 学习ajax 总结

    一.服务器客户端基础知识 通信是指不同计算机程序的通信,单单通过ip地址就能知道你找的是哪一台计算机,但是不知道是计算机上的哪个应用程序,要想知道是哪个程序就必须通过端口.这时候就可以问端口到底是什么 ...

  5. .net求两个数的最大公约数和最小公倍数

    最大公约数:指两个或多个整数共有约束中最大的一个. 最小公倍数:如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数,对于两个整数来说,指该两数共有倍数中最小的一个. /// <s ...

  6. Android应用中-更新提示显示红点的方案

    什么是红点更新提示? 红点更新提示类似微信朋友圈有新的朋友消息 时会在“发现”tab上显示红点,表示有新的消息. 目前三种显示方式: 1.显示具体数字 2.只显示红点 3.显示省略,表示数量很多 方案 ...

  7. Rebind and Rewind in Execution Plans

    http://www.scarydba.com/2011/06/15/rebind-and-rewind-in-execution-plans/ Ever looked at an execution ...

  8. 合理使用mysql中的load data infile导入数据

    基本语法: load data  [low_priority] [local] infile 'file_name txt' [replace | ignore]into table tbl_name ...

  9. Memcached 安装配置

    安装: memcached -d install memcached -d start net start "Memcached Server" 卸载: memcached -d ...

  10. Today’s words

    transcendental,transcendental capacity commission,the commission would keep venetian unimodel transi ...