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. javaweb学习总结十四(xml约束之Schema)

    一:schema约束简单介绍 1:xml Schema的定义以及优缺点 2:xml schema入门 3:命名空间 这里http://www.itcast.cn 并没有什么具体的意义,只是命名而已. ...

  2. BZOJ1975 [Sdoi2010]魔法猪学院

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  3. sql中在查询时两列合并为一列

    select  a + ' '+b  as ab from tableName 如果是有整型的(例,b字段为int类型): select a +' '+Convert(VARCHAR(50),b) a ...

  4. ASP多行多列显示代码

    <table width="98%" border="0" align="center"> <tr> <% S ...

  5. Learn Python The Hard Way学习笔记001

    今天搜索了一下raw_input() 和 input()的区别,引用下原文部分内容 两个函数均能接收 字符串 ,但 raw_input() 直接读取控制台的输入(任何类型的输入它都可以接收).而对于 ...

  6. Oracle 简介 三层结构

    引言: 主流数据库:sql server, oracle, my sql,IBM公司的DB2 ,oracle占有量很大 dbms(database management system)数据库管理系统 ...

  7. CoreAnimation 核心动画二 锚点

    锚点: anchorPoint     以锚点为中心 执行动画 (与 渔夫固定船的点时一致的) anchorPoint 默认是 0.5,0.5  (注意: 锚点 是一个比例) anchorPoint ...

  8. iOS预处理指令

    预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器.可见预处理过程先于编译器对源代码进行处理. 预处理指令是以#开头的代码行,#后是指令关键字,在关键字和#号之间允许存在任意个数的空 ...

  9. js 获取 当前时间 时间差 时间戳 倒计时

    开发web一段时间后发现经常使用时间进行一些操作,比较多的就是获取当前时间.对时间进行比较.时间倒计时.时间戳这些部分,每次去用经常忘总是需要去查询,还是自己总结一下比较靠谱. 获取时间戳的方法: 第 ...

  10. (转)Hprose与WCF在云计算平台Azure上的对决

    Windows Azure Platform是一个运行在微软数据中心的云计算平台.它包括一个云计算操作系统和一个为开发者提供的服务集合.开发人员创建的应用既可以直接在该平台 中运行,也可以使用该云计算 ...