GDataXMLNode创建和解析XML
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的更多相关文章
- iOS 用GDataXMLNode创建和解析XML
原文地址:http://blog.csdn.net/gf771115/article/details/7718403 NSError *error; // NSString *path = [[ ...
- 使用dom4j创建和解析xml文件
使用dom4j创建和解析xml文件 在项目开发中,我们经常会遇到xml文件的创建和解析从别人接口得到的xml文件,而我们最常使用的组件是dom4j. 下面我就以代码来讲解一下如何使用dom4j来创建x ...
- 使用dom4j创建和解析xml
之前工作中用到了,相信写java的都会碰到xml,这里写了两个方法,创建和解析xml,废话不多说,直接上代码 package xml; import java.io.File; import java ...
- (转)Android 创建与解析XML—— Dom4j方式 .
转:http://blog.csdn.net/ithomer/article/details/7521605 1.Dom4j概述 dom4j is an easy to use, open sourc ...
- MsXml创建和解析XML示例
一.MsXml创建XML文档示例 // XmlCreationDemo.cpp #include <stdlib.h> #include <stdio.h> // 引入MSXM ...
- Java 创建过滤器 解析xml文件
今天写了一个过滤器demo,现在是解析actions.xml文件,得到action中的业务规则:不需要导入任何jar包 ActionFilter过滤器类: package accp.com.xh.ut ...
- dom4j创建和解析xml文档
DOM4J解析 特征: 1.JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能. 2.它使用接口和抽象基本类方法. 3.具有性能优异.灵活性好.功能强大和极端易用的特点. 4.是一个开 ...
- PHP创建与解析 XML 1 (36)
一.使用SimpleXML操控XML 要处理XML 文件,有两种传统的处理思路:SAX 和DOM.SAX 基于事件触发机制,对XML 文件进行一次扫描,完成要进行的处理:DOM 则将整个XML 文件构 ...
- PHP使用SimpleElement创建和解析xml文件
<!-- 使用SimpleXMLElement生成xml文件 --><?php//生成一个xml文件 //xml字符串$_xml = <<<_xml<?xml ...
随机推荐
- Clover:让Windows下的资源管理器具有Chrome一样的标签页
这个小巧实用的插件第一次激发了我给人捐款的冲动. 不多说,上图看效果: 具有和Chrome一样的书签功能,以网页的形式保存本地位置,将常用目录放在书签上十分方便. 多标签相比多窗口的优势不需要我多说, ...
- 关于win7系统中所有exe文件都被以word方式打开的解决方法
手残一刻,电脑桌面所有的软件快捷方式都变成了word的打开方式,鼠标右键选中某exe文件也没打开方式那个选项, 第一次尝试: 在控制面板——默认程序中修改默认打开方式,但是没有找到解决方法
- MSP430常见问题之LCD 显示驱动类
Q1:晶体一般都是接32768,然后使用液晶很正常.我打算将晶体接6M的替换32768,那么液晶还能正常显示吗A1:看你所用的LCM 模块时序极限是多少HZ,然后看6M情况下,MSP430去驱动LCM ...
- django 学习-2 模板
如何使用渲染模板的方法来显示内容. 1.创建一个项目dream django-admin.py startproject dream cd dream 再创建一个应用 python m ...
- 一段C程序分析
#include <stdio.h> #include <stdlib.h> void main() { int i; ; char ch; printf("请输入一 ...
- Android 分析工具 APKAnalyser
APKAnalyser 是 Android 静态,虚拟分析工具,用来测试和验证 Android 应用的开发工作.ApkAnalyser 是个完整的工具链,可以修改二进制应用.用户可以改装,安装,运行, ...
- Memcached学习(二)
4.协议简介 Memcached服务与各客户端间通过Tcp链接通讯(也可通过Udp链接). 各客户端间与服务间不需要发送特别的命令关闭链接,只要在不需要的时候直接关闭链接即可.建议客户端与服务间保持长 ...
- iOS学习——iOS视频和推荐网站
最近有人问有没有iOS学习的相关资料,就简单的把自己的知道的和资源共享一下: 个人感觉iOS开发人才饱和,培训泛滥,个人推荐后台升职空间大和web前端竞争小. [链接][Ronda收集整理]2014年 ...
- C#中Predicate<T>与Func<T, bool>泛型委托的用法实例
本文以实例形式分析了C#中Predicate<T>与Func<T, bool>泛型委托的用法,分享给大家供大家参考之用.具体如下: 先来看看下面的例子: 1 2 3 4 5 6 ...
- OpenGL4-绘制旋转的立方体
代码下载 #include "CELLWinApp.hpp"#include <gl/GLU.h>#include <assert.h>#include & ...