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. 详解HTML<head> 头标签元素的意义以及使用场景

    HTML<head>头部分的标签.元素有很多,涉及到浏览器对网页的渲染,SEO 等等,而各个浏览器内核以及各个国内浏览器厂商都有些自己的标签元素,这就造成了很多差异性.移动互联网时代,he ...

  2. Linux 命令 - ls: 列出目录内容

    ls 命令很可能是用户最常使用的命令,通过 ls 命名可以查看目录内容,确定各种重要文件和目录的属性. 命令格式 ls [OPTION]... [FILE]... 命令参数 -a, --all 列出所 ...

  3. 最新app源码下载:200款优秀Android项目源码

    200款优秀Android项目源码!菜鸟必备!Android开发又将带来新一轮热潮,很多开发者都投入到这个浪潮中去了,创造了许许多多相当优秀的应用.其中也有许许多多的开发者提供了应用开源项目,贡献出他 ...

  4. ios Swift 之github

    1. 软件类 a) 作者集合 http://nondot.org/sabre/ b) swift for facebook SWIFT是一个易于使用的,基于注解的Java来创建勤俭节约序列化类型和服务 ...

  5. Contoso 大学 - 6 – 更新关联数据

    原文 Contoso 大学 - 6 – 更新关联数据 By Tom Dykstra, Tom Dykstra is a Senior Programming Writer on Microsoft's ...

  6. MySQL查询不使用索引汇总

    众所周知,增加索引是提高查询仍然不使用索引,这种情况严重影响性能,这里就简单总结几条如果如果列key均匀分布在1和100之间,下面的查询使用索引就不是很好:select * from table_na ...

  7. ubuntu下mysql的环境搭建及使用

    ubuntu下mysql的环境搭建及使用 环境安装 使用如下命令分别安装服务端程序,客户端程序,及客户端依赖库 sudo apt-get install mysql-server sudo apt-g ...

  8. 百度或者Google---SEO优化

    google和百度的技术差别: 1.百度还认不清哪个是原创的 2.google蜘蛛不够百度快 4.google排名结果随时变化 流量.权重.权威.内容.用户体验.用户关注度等等细节的排名,已表达了SE ...

  9. 使用httpclient发送post请求与get请求

    最近因为项目的要求,需要使用httpclient来发送请求.但是查阅了许多博客,大家发送请求的方法各不相同.原因是因为httpclient的jar包的不同版本,其内部方法也不相同.因此抛开具体用到的j ...

  10. Contest1065 - 第四届“图灵杯”NEUQ-ACM程序设计竞赛(个人赛)G爬楼梯

    题目描述 由于第m个台阶上有好吃的薯条,所以薯片现在要爬一段m阶的楼梯. 薯片每步最多能爬k个阶梯,但是每到了第i个台阶,薯片身上的糖果都会掉落ai个,现在问你薯片至少得掉多少糖果才能得到薯条? 输入 ...