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. Adobe Edge Animate –可重复使用的个性化按钮制作

    Adobe Edge Animate –可重复使用的个性化按钮制作 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 效果图: 工程文件中:

  2. js实现堆排序

    <script type="text/javascript"> var arr = [22, 31, 1, 9, 99, 68, 55, 30]; function h ...

  3. LeetCode 122

    Best Time to Buy and Sell Stock II Say you have an array for which the ith element is the price of a ...

  4. HTTP状态码解读

    1xx:信息 消息 描述 100 Continue 服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求. 101 Switching Protocols 服务器转换协 ...

  5. nodejs1

    介绍: 为什么使用Node 1.解决了高并发连接时的内存占用和资源共享问题 传统后台语言是多线程的,比如:每个用户占2m的内存,8G内存可以承载4000人,node是单线程,触发一个事件,可以容纳几万 ...

  6. Commons Math - Primes

    org.apache.commons.math3.primes.Primes 是关于质数操作的工具类. 1. public static boolean isPrime(int n) 判断 n 是否为 ...

  7. C#算法基础之快速排序

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. 配置对IIS上tabular的 HTTP 访问

    上周网管说某部门一同事用的自家电脑办公,操作系统是正版win8家庭版,不能加入公司域,求解如何访问数据仓库. 以前一直以为只有域内用户才能使用数据仓库,没办法有问题总要给人解决,一味地推脱不但会影响其 ...

  9. XMPP登录应用

    一.导入框架 1.XMMP框架,写入头文件,设置XMPPStreamDelegate代理,定义 XMPPStream *_xmppStream; 2.libresolv.dylib 3.libxml2 ...

  10. (转)ASP.NET并发处理

    对于DB服务器同样也可以调整最大连接数来做优化. 在调整优化好最大连接数之后,就只有软硬件负载均衡了.硬件负载均衡能够直接通过智能交换机实现,处理能力强,而且与系统无关,但是价格贵,配置困难,不能区分 ...